接着之前两个文章我们已经编译了Linux内核和制作了一个文件系统

这一步我们将它们打包成一个img软盘文件

1.使用DD命令创建一个镜像的img文件

sudo dd if=/dev/zero of=my_linux.img bs=1M count=128

2.使用fdisk命令给镜像文件分区

sudo fdisk my_linux.img

2.1输入n命令创建分区

2.2输入p创建主分区

2.3分区号设置为1,代表我们的主引导分区

2.4第一个扇区大小输入默认值,或者直接回车

2.5Last sector直接按下回车,使用默认值

这个选项是指定终止分区扇区大小,如果我们直接回车则会自动以结尾扇区作为大小

我们刚刚创建的大小是128个块,128MB,这里会预留1MB作为文件格式头,所以是127MB

2.6w写入

3将文件系统挂载到/dev/loop上

我们的设备是非物理设备的文件系统,所以需要使用loop设备文件来挂载

sudo losetup -o 1048576 /dev/loop0 my_linux.img

可能会出现:

这种情况下我们可以不停的修改loop索引号来寻找没有挂载的

将loop0改成loop1,loop2依次类推

或者可以使用umount命令卸载指定loop设备在挂载

sudo umount /dev/loop0

4.格式化我们的分区,格式化成ext4文件系统,这是linux内核目前主要支持的文件系统

你也可以改成别的文件系统,前提是linux内核支持,同时你要在编译选项里修改它的文件系统支持

sudo mkfs.ext4 /dev/loop0

5.创建一个文件夹用于挂载我们的文件系统

sudo mkdir my_linux

6.将文件系统挂载到这个目录下,便于操作

sudo mount -t ext4 /dev/loop0 my_linux

7.进入到my_linux目录

cd my_linux

8.创建boot目录

该目录为了支持grub引导程序而创建,创建此目录是为了符合grub的引导文件目录体系

sudo mkdir boot

9.将我们的bzImage与rootfs.img文件copy到此目录下

sudo cp /usr/src/linux_kernel/arch/x86/boot/bzImage .
sudo cp /usr/src/busy/rootfs.img .

10.安装grub

回到我们刚刚创建img文件的目录

然后输入如下命令:

sudo grub-install --boot-directory=./my_linux/boot/ --target=i386-pc --modules=part_msdos my_linux.img

我们可以看到刚刚创建的boot的目录下有一个grub目录

这个目录下是没有grub.cfg文件的,我们需要手动创建与配置

11.编写grub.cfg

1.进入到grub目录下

cd grub

2.编写grub.cfg

sudo vim grub.cfg

输入如下:

menuentry "my_linux" {linux (hd0,msdos1)/boot/bzImage root=/dev/ram rw init=/bin/ashinitrd (hd0,msdos1)/boot/initrd.img
}

msdos代表mbr分区,hd代表硬盘,现在流行分区格式只有msdon(mbr),gpt

12.卸载挂载

sudo umount /dev/loop0

好了,至此,我们的img镜像文件已经创建好了,使用qemu运行一下看看

sudo qemu-system-x86_64 my_linux.img

可以看到grub正确找到我们的系统,这里我的grub为2.4也就是grub2

回车可以进入系统

Linux内核开发_将Linux内核打包成img文件相关推荐

  1. .net core 文件流保存图片_如何将图片打包成PDF文件进行保存?

    如何将图片打包成PDF文件进行保存?我们都知道PDF文件是一种电子文档发行和数字化信息传播的理想文档格式,支持跨平台传输.对普通读者而言,用PDF制作的电子书具有纸版书的质感和阅读效果,可以逼真地展现 ...

  2. Linux系统获取开发板的文件系统并打包成img文件

    应用情形: 在实际的开发中,由于原系统包含的功能有限,而根据项目的需要,安装了相应的库及运行项目程序所创建的各种文件,和所做     的各种配置,想将调试好的系统打包发布,进行批量生产,就可参考本文提 ...

  3. pip工具可以打包python源代码吗_将python源文件打包成exe文件

    pyinstaller 库的使用 PyInstaller是一个十分有用的第三方库,它能够在Windows.Linux.Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包,Py ...

  4. python 解析pb文件_将tensorflow模型打包成PB文件及PB文件读取方式

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  5. APP代码打包成apk文件

    序言 该篇文章对于APP云打包功能进行讲解,欢迎大家指出问题和发表建议! 生成证书文件 APP开发完成之后,需要打包成apk文件安装到手机上. 生成证书文件之前需要 Android Studio文件( ...

  6. linux内核开发入门二(内核KO模块介绍、开发流程以及注意事项)

    linux内核开发入门二(内核KO模块介绍.开发流程以及注意事项) 一.什么是内核模块 内核模块:ko模块(Kernel Object Module)是Linux内核中的可加载模块,它可以动态地向内核 ...

  7. Linux驱动开发_设备文件系统详解

    目录 何为设备管理器? Linux下dev的作用 Devfs sysfs kobject udev proc 何为设备管理器? 设备管理器就是负责管理这台电脑上的外设,当我们通过电脑提供的USB口插入 ...

  8. 开源社区推广相关(七)|关于建立PostgreSQL内核开发交流群及内核开发资料分享git仓库的说明

    目录结构 关于建立PostgreSQL内核开发交流群及内核开发资料分享git仓库的说明 PostgreSQL内核开发交流群 PostgreSQL内核开发的资料 PostgreSQL内核开发交流群 大家 ...

  9. windows内核开发笔记七:内核开发OVERLAPPED结构体详解

    windows内核开发笔记七:内核开发OVERLAPPED结构体详解 typedef struct _OVERLAPPED {   DWORD Internal;   DWORD InternalHi ...

最新文章

  1. 2D目标检测CVPR2020总结
  2. 高通android开发摘要
  3. 实现物联网项目,你需要提前知道的6件事情
  4. html表格怎么设置浮动,html – 表格布局和浮动左和引导网格
  5. 推荐几个程序员学习网站
  6. JS获取对象的第一个值
  7. PyQT简单入门--hello world
  8. 录音软件行业调研报告 - 市场现状分析与发展前景预测
  9. halfstone 原理_打水漂的原理研究
  10. 电路里的希腊字母读音
  11. antv,图表和地图
  12. cass简码大全_考考你......列出 南方cass 简码指令50个。
  13. C++ string大小写转换
  14. av_opt_set函数族详解
  15. 计算机基础:调整显示器分辨率及刷新率
  16. [翻译]现代java开发指南 第二部分
  17. linux主机通过top看CPU性能指标
  18. (零代) MDD 开创低代码领行设计模式
  19. (7)-HALCON图像采集助手:界面介绍
  20. 划词搜索被ewido视为高风险Adware.wSerarch

热门文章

  1. matlab2013语言设置,科学网—macOS MATLAB 更改界面语言设置——中文改为英文 - 李航的博文...
  2. Android Studio实现学生信息管理系统,基础入门项目
  3. mybatis plus 动态创建表和字段_mybatis-plus maven代码生成器
  4. android 挖孔屏适配_小米公布安卓Q升级适配计划,共11款机型
  5. cenyos7安装 yum不可用_小区阳台隐形网横管不可用扁管,要改再去安装,还有问题...
  6. lambda函数if_现代 C++:Lambda 表达式
  7. java stream流_恕我直言你可能真的不会java第4篇:Stream管道流Map操作
  8. 期末C语言45分能过的吗,C语言—期末小黄衫获奖感言
  9. python模拟购物车流程_用函数模拟简单的购物车(Python)
  10. java 多列 统计_java – 如何计算多列(colspan)HTML表的宽度?