我需要在手臂上运行HelloWorld。 我发布了:
$ arm-none-eabi-g++ -mthumb -mcpu=cortex-m3 -c test.cpp -o test
$ file test
test: ELF 32-bit LSB relocatable, ARM, EABI5 version 1 (SYSV), not stripped
$ qemu-arm test <br>
Error while loading test: Permission denied
答案 0 :(得分:2)
qemu-system-arm -machine help
...
lm3s811evb Stellaris LM3S811EVB
...
从lm3s811数据表或查看qemu arm硬件上stellaris后端的来源。 Uart0基地址为0x4000C000,数据(rx和tx)寄存器偏移量为0x000。从经验来看,qemu后端往往不会打扰tx缓冲区忙......
flash.s
.cpu cortex-m0
.thumb
.thumb_func
.global _start
_start:
.word 0x20001000
.word reset
.word hang
.word hang
.word hang
.word hang
.word hang
.thumb_func
reset:
bl notmain
b hang
.thumb_func
hang: b .
.thumb_func
.globl PUT32
PUT32:
str r1,[r0]
bx lr
uart01.c
void PUT32 ( unsigned int, unsigned int );
#define UART0BASE 0x4000C000
int notmain ( void )
{
unsigned int rx;
for(rx=0;rx<7;rx++)
{
PUT32(UART0BASE+0x00,0x30+rx);
}
return(0);
}
flash.ld
MEMORY
{
rom : ORIGIN = 0x00000000, LENGTH = 0x1000
ram : ORIGIN = 0x20000000, LENGTH = 0x1000
}
SECTIONS
{
.text : { *(.text*) } > rom
.rodata : { *(.rodata*) } > rom
.bss : { *(.bss*) } > ram
}
是的,stellaris是你可以购买的硅中第一个cortex-m3,我指定了cortex-m0。基本上阻止了thumb2扩展,或大多数扩展。更便于携带,如果您愿意,可以轻松更改。
arm-none-eabi-as --warn -mcpu=cortex-m0 flash.s -o flash.o
arm-none-eabi-gcc -Wall -O2 -nostdlib -nostartfiles -ffreestanding -mcpu=cortex-m0 -mthumb -c uart01.c -o uart01.o
arm-none-eabi-ld -o uart01.elf -T flash.ld flash.o uart01.o
arm-none-eabi-objdump -D uart01.elf > uart01.list
arm-none-eabi-objcopy uart01.elf uart01.bin -O binary
然后
qemu-system-arm -M lm3s811evb -m 16K -nographic -kernel uart01.bin
,输出
0123456
ctrl-a然后按x退出qemu。或
qemu-system-arm -M lm3s811evb -m 16K -kernel uart01.bin
然后ctrl-alt-3(3而不是F3)并且串行控制器弹出串行输出。关闭该串行控制台时,qemu关闭。
我想记得有人告诉我qemu cortex-m3支持不是那么好。
正常的臂芯应该经过充分测试,因为它们用于交叉编译所有类型的臂靶板。不确定哪些核心经过了很好的测试,但如果你像手臂一样开机,你可以做拇指的东西但是用拇指做其余的,用
启动.globl _start
_start:
b reset
b hang
b hang
b hang
reset:
mov sp,#0x20000
bl notmain
hang:
b hang
机器
versatilepb ARM Versatile/PB (ARM926EJ-S)
的uart位于0x101f1000,所以
for(ra=0;;ra++)
{
ra&=7;
PUT32(0x101f1000,0x30+ra);
}
可以使用
构建您的应用arm-none-eabi-gcc -Wall -O2 -nostdlib -nostartfiles -ffreestanding -mcpu = arm7tdmi -mthumb -c uart01.c -o uart01.o
将您的链接描述文件更改为基于ram的所有内容。
MEMORY
{
ram : ORIGIN = 0x00000000, LENGTH = 32K
}
SECTIONS
{
.text : { *(.text*) } > ram
.bss : { *(.text*) } > ram
}
然后
qemu-system-arm -M versatilepb -m 128M -nographic -kernel hello.bin
(嗯,这个加载在0x0000,还是0x8000?,不应该太难搞清楚)
你可以获得大多数皮质m的拇指感觉(m0基本上不是m3,你可以找到一个armv7-一台你可以运行thumb2内置代码的机器(仍然像手臂而不是皮质m的靴子) )。例如
realview-pb-a8 ARM RealView Platform Baseboard for Cortex-A8
可能几乎可以使用newlib,需要更改crt0.s或者这些天所称的任何内容,如同一只手臂而不是一个cortex-m。其余的可以使用armv7m构建,理论上可行。
或者从stellaris开始,只需为你的真实目标做出自己的hw支持,并在发现问题时修复cortex-m3核心。