本文介绍的是使用分区block设备作为根文件系统的加载方法,使用QEMU来模拟硬件来进行讲解。
github仓库:https://github.com/rikeyone/qemu-linux-system.git
制作嵌入式Linux系统的rootfs
cd rootfs/
sudo dd if=/dev/zero of=rootfs.ext3 bs=1M count=50
sudo mkfs.ext3 rootfs.ext3
sudo mount -t ext3 rootfs.ext3 /mnt -o loop
sudo cp _install/* /mnt -fra
sudo umount /mnt
sudo chmod 666 rootfs.ext3
最后会生成一个名字为rootfs.ext3的文件,这个就是我们想要的一个rootfs,文件系统格式为ext3,可以使用qemu进行测试。
qemu加载
qemu-system-arm -M vexpress-a9 \
-smp 4 \
-m 1024m \
-kernel linux-4.0/arch/arm/boot/zImage \
-append "root=/dev/mmcblk0 rw console=ttyAMA0 loglevel=8" \
-dtb linux-4.0/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \
-sd rootfs/rootfs.ext3 \
-nographic
关键是传入“root=/dev/mmcblk0 rw”的cmdline,以及对应的qemu选项“-sd rootfs/rootfs.ext3”。
u-boot加载
如果我们在实际硬件上使用,并且使用uboot作为bootloader,我们只需要有对应的emmc外设即可,并且在外设提前烧录rootfs中的内容即可。传递的cmdline还和上面qemu测试时一致:
root=/dev/mmcblk0 rw