QEMU 加载器设备 - 在同一地址加载裸机二进制文件 space
QEMU loader device - load bare metal binary in same address space
作为参考,我在 aarch64 上 运行 裸机 QEMU-6.1.0 使用 Xilinx fork.
我正在使用 generic loader device 将单片裸机二进制文件加载到 qemu-system-aarch64
中,并正在为其编写一些外围驱动程序。问题是二进制文件加载到与加载自定义设备的地址不同的地址 space。
有什么方法可以指定地址 space,设备加载程序将把裸机二进制文件加载到该地址?
我用于加载二进制文件的方法可以在 运行 Zynq Ultrascale+ MPSoC r5 部分的裸机应用程序中找到 QEMU Xilinx docs.
我通过在 cpu_address_space_init
中使用导出的 address_space_memory
引用而不是默认分配的 AddressSpace
引用解决了这个问题。
void cpu_address_space_init(CPUState *cpu, int asidx,
const char *prefix, MemoryRegion *mr)
{
AddressSpace *as = &address_space_memory;
//...
}
作为参考,我在 aarch64 上 运行 裸机 QEMU-6.1.0 使用 Xilinx fork.
我正在使用 generic loader device 将单片裸机二进制文件加载到 qemu-system-aarch64
中,并正在为其编写一些外围驱动程序。问题是二进制文件加载到与加载自定义设备的地址不同的地址 space。
有什么方法可以指定地址 space,设备加载程序将把裸机二进制文件加载到该地址?
我用于加载二进制文件的方法可以在 运行 Zynq Ultrascale+ MPSoC r5 部分的裸机应用程序中找到 QEMU Xilinx docs.
我通过在 cpu_address_space_init
中使用导出的 address_space_memory
引用而不是默认分配的 AddressSpace
引用解决了这个问题。
void cpu_address_space_init(CPUState *cpu, int asidx,
const char *prefix, MemoryRegion *mr)
{
AddressSpace *as = &address_space_memory;
//...
}