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

回车可以进入系统

 

 

本文标签: 内核文件Linuximg