【qemu】以sd方式添加根文件系统运行linux内核
【效果走一波】
文章目录
- 【qemu】以sd方式添加根文件系统运行linux内核
- 一、开篇
- 二、使用linux内核的回环设备创建文件系统镜像
- (2-1)创建一个文件
- (2-2)创建一个ext3的文件系统镜像
- (2-3)挂载ext3文件系统
- (2-4)填充文件系统内容
- 三、qemu下以sd方式启动于宿主机上的文件系统镜像
一、开篇
在使用qemu运行linux内核时,在linux内核运行最后,挂载根文件系统是个关键点,如果以initramfs方式挂载文件系统,因其存在于RAM中,系统重新启动后,对文件系统中文件数据的读写都会恢复到最初状态。故本文描述另一种方法:以sd方式添加根文件系统。
本篇文章涉及几个重要的知识点:
- 如何使用linux内核的回环设备创建文件系统镜像
- qemu下以sd方式启动挂在于宿主机上的文件系统镜像
二、使用linux内核的回环设备创建文件系统镜像
linux内核的回环设备:可以让一个普通文件当作块设备使用。总而言之,就是可以先在一个普通文件中创建一个文件系统镜像,然后使用linux的回环设备来挂载这个文件,就如同挂载一个块设备一样。下面将是具体的步骤:
(2-1)创建一个文件
sudo dd if=/dev/zero of=./rootfs.ext3 bs=1M count=32
该条命令会创建一个32M大小,内容全部填充为0的文件。
【特别注意】dd
命令功能强大,使用时如果没有限制范围(count=)或者指定的范围错误,那么他会在硬盘驱动器中填满数据并且可能造成宿主机系统崩溃。所以使用dd命令时需要:
格外注意!!格外注意!!格外注意!!
(2-2)创建一个ext3的文件系统镜像
sudo /sbin/mkfs.ext3 ./rootfs.ext3
mkfd.ext3
命令与dd命令一样也会摧毁我们的系统,使用时也需格外注意!!!。
(2-3)挂载ext3文件系统
mkdir tmpfs
mount -t ext3 rootfs.ext3 tmpfs/ -o loop
以上命令的意思是创建一个tmpfs目录,然后将rootfs.exts
挂载到名为 tmpfs/的挂载点上(挂载点的名称不重要,可以将它挂载到任何位置,只要这个挂载点存在)。
(2-4)填充文件系统内容
因为rootfs.ext3
文件系统硬镜像是要作为sd方式启动linux内核的,所以,我们需要用真正的文件系统目录填充rootfs.ext3
文件系统。填充方法是:将使用busybox生成的文件系统下的内容全部复制到tmpfs目录下。如下命令:
cp -r rootfs/* tmpfs/
然后使用sudo umount tmpfs
取消挂载。
使用这种方法时,文件系统的大小在创建的时候就确定了而且不能改变。所以说,如果想要修改文件系统大小,就需要重新创建回环设备文件并重新分配该文件大小。
三、qemu下以sd方式启动于宿主机上的文件系统镜像
在shell命令行终端输入以下命令:
sudo qemu-system-arm -M vexpress-a9 -m 512m -kernel zImage -dtb vexpress-v2p-ca9.dtb -append "root=/dev/mmcblk0 rw rootfstype=ext3 rdinit=sbin/init console=ttyAMA0" -nographic -sd rootfs.ext3
【效果】