如何交叉在Qemu中运行的Netduino2的编译代码

时间:2016-08-17 15:55:23

标签: arduino arm qemu bare-metal netduino

我找到了一个在Arm板上制作裸金属“Hello World”程序的教程。 https://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/我能够构建它并在Qemu中运行它。

要在NetDuino2上运行它,我将uart地址更改为0x40011000并使用以下命令为cortex-m3 *构建它:

arm-none-eabi-as -mcpu=cortex-m3 startup.s -o startup.o
arm-none-eabi-gcc  -c -mcpu=cortex-m3 -mthumb -s test.c -o test.o
arm-none-eabi-ld -T linker.ld test.o startup.o -o output.elf
arm-none-eabi-objcopy -O binary output.elf output.bin
../../qemu/arm-softmmu/qemu-system-arm -M netduino2 -nographic -kernel output.bin

第二个dword上的Qemu barfs说它在RAM或ROM之外。

使用Ida Pro我反汇编了versatilepb和这个二进制文件的原始示例,它们几乎完全相同。在这两种情况下,第二个dword是一个分支指令,但是使用versatilepb Qemu将其作为分支执行,而netduino2 Qemu认为它是一个地址并试图跳转到la la land。

我想我必须犯一个愚蠢的错误,但我找不到它。我在网上寻找NetDuino交叉编译示例,但只找到了C#和Windows示例。任何帮助将不胜感激。

注意:

我现在没有硬件所以我无法测试它是否在真正的主板上运行。

我使用了cortex-m3,因为Netduino2是cortex-m3,还是这是我的愚蠢错误?

0 个答案:

没有答案