当还给出 bios 选项时,qemu arm 中的内核映射地址是什么

what is the kernel map address in qemu arm when bios option is also given

我正在尝试在 qemu 中使用裸机 bios 和内核制作一个裸机臂 os。

当我尝试 qemu-system-arm -machine virt -bios boot.bin -nographic 时,boot.bin 被映射到 0x00,当我尝试 qemu-system-arm -machine virt -kernel kernel.bin 时,kernel.bin 被映射到 0x40010000。

所以当我这样做时 qemu-system-arm -machine virt -bios boot.bin -kernel kernel.bin boot.bin 被映射到 0x00 但我没有找到 kernel.bin。我试图检查 0x40000000,但那里也有一些垃圾值(可能不是垃圾,但它不是 kernel.bin)

我找不到任何说明此问题的文档,而且如果我要使用 -drive 选项,我该如何继续呢?就像我是否需要编写一个驱动程序来访问驱动器,如果是的话,我在哪里可以看到文档或可以指导的东西

如果您使用 -bios 将固件映像传递给 'virt' 主板,那么 QEMU 会将内核映像(和任何 initrd)放入 'fw-cfg' 设备中。然后 bios 映像中的访客代码可以访问 fw-cfg 设备,告诉它通过 DMA 将内核映像传送到它喜欢的任何地址。 (此功能主要是为 UEFI BIOS 提供的,当然任何访客代码都可以根据需要使用 fw-cfg 设备。)

0x40000000 处的数据是设备树 blob,这是您的 BIOS 映像应该读取的内容,以便找出所有硬件设备在地址映射中的位置。 (这部分有文档,在https://www.qemu.org/docs/master/system/arm/virt.html底部)

请注意,'-kernel' 的意思是“我是一个 Linux 内核,请以最合适的方式加载我”。如果您不想要那个,而只想“在我指定的地址加载二进制图像”,请查看“通用加载器”设备。