ARM C裸機

這個不太清楚怎麼翻譯,就是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.ld
ENTRY(_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 俺沒有仿真器,所以退出了,呵呵。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章