QEMU虚拟机如何添加SD/Flash?

How to add SD/Flash to QEMU virt machine?

我写了一个裸机程序,我需要 flash/SD 来存储我的文件系统。

我选择的 QEMU 是 "qemu-system-aarch64 -machine virt -cpu cortex-a57 -smp 1 -m 1G -nographic -serial mon:stdio -d in_asm,int,mmu -D ./qemu.log -kernel myimg.bin"。

我转储了 QEMU(arm64) 虚拟机的 dts,这些只是一个 PCIe 总线和一个 cfi-flash。貌似cfi-flash是用来boot的。 PCIe 对我来说太复杂了。

我知道不能通过命令行动态实例化连接到系统总线的设备。

如何将任何 flash/SD 添加到虚拟机?

如果一定要用PCIe添加,命令行应该是什么?有什么PCIe裸机驱动可以参考吗?

您不能像这样向 'virt' 板上添加更多闪存。文件系统的存储通常是通过 virtio 设备完成的(通常是 pci virtio-blk 设备,尽管您也可以使用 virtio-scsi 和模拟的 scsi 磁盘)。

如果您正在编写裸机程序,那么您可以使用位于地址 0 和 0x04000000 的闪存设备(如果您愿意)——它们仅在您启动 UEFI BIOS 时用于启动,这裸机设置不会做。您可以使用“-drive if=pflash,...”选项将支持文件连接到它们。我不确定这些是否真的适合放置文件系统,但这取决于你用它做什么,它可以工作。两个 pflash 的大小都是 0x04000000 字节。

对于 virt 板,如果您将任何东西放入第一个 pflash 设备,那么该板将假定它是 BIOS 代码并尝试从中启动。为避免这种情况,您可以使用第二个 pflash 设备。要将内容放入第二个 pflash,您需要将 "unit=1" 添加到“-drive if=pflash,...”选项。