我有一个模拟 ARM vexpress-a9 的工作 QEMU 映像,我像这样运行它:
sudo qemu-system-arm -m 512M -M vexpress-a9 -D qemu.log -d unimp -kernel buildroot-2019.02.5/output/images/zImage -dtb buildroot-2019.02.5/output/images/vexpress-v2p-ca9.dtb -append "console=ttyAMA0,115200 kgdboc=kbd,ttyAMA0,115200 ip=dhcp nokaslr" -initrd buildroot-2019.02.5/output/images/rootfs.cpio -nographic -net nic -net bridge,br=mybridge -s
我现在想为持久存储添加一个硬盘,然后将控制权从基于busybox initrd 的rootfs 转移到Linux 提供的完整版本。所以我将它添加到命令行
sudo qemu-system-arm -m 1024M -M vexpress-a9 -D qemu.log -drive if=none,format=raw,file=disk.img -kernel buildroot-2019.02.5/output/images/zImage -dtb buildroot-2019.02.5/output/images/vexpress-v2p-ca9.dtb -append "console=ttyAMA0,115200 kgdboc=kbd,ttyAMA0,115200 ip=dhcp nokaslr" -initrd buildroot-2019.02.5/output/images/rootfs.cpio -nographic -net nic -net bridge,br=mybridge -s
当然,我首先创建一个磁盘映像并将其格式化为 ext2:
qemu-img create disk.img 10G && mkfs.ext2 -F disk.img
从日志消息中我看到它根本无法检测到这一点。有人可以总结块设备如何与 Qemu 一起工作。我知道旧的-hda
已经改成新的-drive
选项,可以分别结合前后端的繁琐规范。但我不知道基础知识以及为什么会遇到这个问题。
我基本上是在寻找switch_root
从 initrd 到成熟的 Linux rootfs,但这只是第一步。