admin管理员组文章数量:1530518
接着之前两个文章我们已经编译了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
回车可以进入系统
版权声明:本文标题:Linux内核开发_将Linux内核打包成img文件 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1725681539a1036360.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论