0

我有一个模拟 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,但这只是第一步。

4

1 回答 1

1

从日志消息中我看到它根本无法检测到这一点。

那是因为您还没有创建连接到该驱动器的 QEMU 设备。

有人可以总结块设备如何与 Qemu 一起工作。

您的前端代表来宾的某种硬件,而后端则与主机上的后备存储进行交互。您使用选项创建前端并使用-device选项阻止后端-drive。您给驱动器一个 id 并从设备中引用该 id。例如,这是我将 virtio-blk-pci 设备附加到我的 virt 机器上的磁盘映像的方式:-device virtio-blk-pci,drive=vd0 -drive file=rootfs.ext2,format=raw,id=vd0.

qemu-system-arm -device help将为您提供支持的设备类型列表,qemu-system-arm -device <specific-device-type>,help并将显示specific-device-type属性的详细帮助。

于 2020-04-14T08:24:06.417 回答