这个不太清楚怎么翻译,就是ARM C的bare metal program。参考了如下链接:
http://balau82.wordpress.com/2010/02/14/simplest-bare-metal-program-for-arm/
http://www.state-machine.com/arm/Building_bare-metal_ARM_with_GNU.pdf
注意我和balau82采用了不同的交叉编译工具。我使用的是用buildroot生成的,参考我前面的文章。
这个程序的主要功能是提供一个不需要操作系统支持的ARM C可执行文件。这种方式有助于了解ARM程序的运行过程。推荐查看上述PDF文件,对整个流程的描述更加清楚。
1. test.c文件
int c_entry() {
return 0;
}
2. 编译test.c
arm-linux-uclibcgnueabi-gcc -c -mcpu=arm926ej-s -g test.c -o test.o
3. startup.s文件
.section INTERRUPT_VECTOR, "x"
.global _Reset
_Reset:
B Reset_Handler /* Reset */
B . /* Undefined */
B . /* SWI */
B . /* Prefetch Abort */
B . /* Data Abort */
B . /* reserved */
B . /* IRQ */
B . /* FIQ */
Reset_Handler:
LDR sp, =stack_top
BL c_entry
B .
4. 编译startup.s
arm-linux-uclibcgnueabi-gcc -mcpu=arm926ej-s -g startup.s -o startup.o 5. 链接文件test.ldENTRY(_Reset)
SECTIONS
{
. = 0x0;
.text : {
startup.o (INTERRUPT_VECTOR)
*(.text)
}
.data : { *(.data) }
.bss : { *(.bss) }
. = . + 0x1000; /* 4kB of stack memory */
stack_top = .;
} 6. 编译test.ldarm-linux-uclibcgnueabi-ld -T test.ld test.o startup.o -o test.elf 7. 使用gdb调试arm-linux-uclibcgnueabi-gdb test.elf 俺没有仿真器,所以退出了,呵呵。