我编写了一个简单的汇编程序来熟悉QEMU。我一直遵循这两个教程(opensourceforu.efytimes.com/2011/07/qemu-for-embedded-systems-development-part-2/) (http://www.csd.uwo.ca/~mburrel/stuff/ppc-asm.html)下面是我为PowerPC写的汇编程序,从第二个教程稍微修改了一下。
.global _Start
_Start:
addi 3, 0, 0xa #load 0xA into r3
addi 4, 0, 0xb #load 0xB into r4
addi 5, 0, 0xc #load 0xB into r5
b .它很基本,只是将随机值加载到通用寄存器3-5中。
当我交叉编译它时,我使用下面的链接器脚本。
ENTRY(_Start)
SECTIONS
{
. = 0x10000;
startup : { dummyStartup.o(.text)}
}我通过第一个教程中的指令使用ppc的交叉编译器将所有东西放在一起,当我在QEMU中运行时,寄存器3-5具有预期的值。
我的问题是,当我将0x10000更改为其他值时,例如0x10500或0x9999,程序仍然运行得很好。本教程指出,QEMU的-kernel选项需要将所有内容设置为0x10000才能执行我的代码,但情况似乎并非如此。为什么会这样呢?
发布于 2015-10-14 13:43:40
我认为0x10000的值与平台相关。因此,根据QEMU模拟的机器不同,内核加载地址也会有所不同。
如果您在QEMU源代码中查找KERNEL_LOAD_ADDR,您将看到有几个不同的值:
https://stackoverflow.com/questions/32530010
复制相似问题