我正在尝试使用QEMU启动内核(从固件中提取)。
Qemu仿真似乎从0x0
开始。
问题是从0x0
到0x04000000
的记忆只有0
。
我该如何调试bootloader?
你没有说出你的命令行是什么。 QEMU开始执行的地址取决于很多方面:
但是,一般情况下,您不应期望能够从一个Arm硬件的固件转储中提取随机内核映像并在QEMU下运行它。这是因为每个Arm板或机器都不同 - RAM可能位于不同的位置,诸如串行端口的设备位于不同的地址,依此类推 - 内核只会在已编译到的系统上启动支持。 (a)QEMU没有对固件转储所用的硬件进行特定仿真,并且(b)固件内核尚未构建为也可以在任何类型的板上运行,这种可能性非常高。 QEMU确实支持。所以它几乎肯定会在启动时很早就崩溃而不会产生任何输出。
如果你想调试早期启动时发生的事情,最好的方法可能是使用QEMU内置的gdbstub,并将一个支持guest-architecture的gdb附加到它。您也可以通过'-d'选项找到QEMU的内部日志记录,但它需要熟悉QEMU如何理解输出。