Arm 运行启动时发生qemu错误

Arm 运行启动时发生qemu错误,arm,boot,qemu,bootloader,Arm,Boot,Qemu,Bootloader,我编写了一个简短的启动代码,并尝试使用Qemu运行它,方法是: qemu-system-arm.exe-M versatilepb-cpu cortex-a9-kernel boot.bin 我希望代码加载到地址0x8400000,但qemu返回了错误 试图在内存或ROM外部0x84000000处执行代码 这通常意味着发生以下情况之一: (1) 您告诉QEMU为错误的机器类型执行内核,它在启动时崩溃(例如试图在versatilepb QEMU机器上运行raspberry pi内核) (2) 您根

我编写了一个简短的启动代码,并尝试使用Qemu运行它,方法是:

qemu-system-arm.exe-M versatilepb-cpu cortex-a9-kernel boot.bin

我希望代码加载到地址0x8400000,但qemu返回了错误

试图在内存或ROM外部0x84000000处执行代码 这通常意味着发生以下情况之一:

(1) 您告诉QEMU为错误的机器类型执行内核,它在启动时崩溃(例如试图在versatilepb QEMU机器上运行raspberry pi内核) (2) 您根本没有给QEMU一个内核或BIOS文件名,QEMU执行了一个充满无操作指令的ROM,直到它结束 (3) 您的来宾内核有一个bug,由于无处跳转而崩溃

这几乎总是前两种类型中的一种,因此请检查您的命令行,并确保您正在为这台机器使用正确类型的内核。 如果您认为选项(3)是可能的,那么您可以尝试使用-d调试选项调试您的来宾;特别是-d guest_错误将导致日志在此时包含guest寄存器状态的转储

执行不能继续;停在这里

所以我想我的代码还没有开始运行,因为它没有加载到正确的位置

我怎么了


谢谢你说“我希望代码加载到地址0x8400000”,但是QEMU的错误消息说“0x84000000”,这不是同一个数字(它有一个额外的0)。这意味着您的链接器脚本或创建boot.bin文件的任何内容中存在输入错误。(我假设boot.bin是一个ELF文件,QEMU在ELF文件指定的地址加载它,因为否则它将加载到RAM中,前提是它是一个能够自我重新定位的Linux内核映像。)

关于额外的0-我的错误,我的意思是0x84000000。如果0x84000000是您希望加载ELF文件的位置,那么QEMU的行为是正确的——该地址没有RAM。您需要构建二进制文件,以便它在板上有RAM的地方加载,而不是加载到虚无中。