Linux内核开发_将Linux内核打包成img文件
接着之前两个文章我们已经编译了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/ash initrd (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
回车可以进入系统


posted on 2025-11-07 10:41 yipianchuyun 阅读(3) 评论(0) 收藏 举报
浙公网安备 33010602011771号