arm 裸板程序編譯過程
這里我們先介紹一下常用的GCC命令.
本文引用地址:http://butianyuan.cn/article/201611/317872.htm1.arm-linux-gcc-v 查看gcc版本號
2.arm-linux-nm 查看一個.o文件所需要的庫。
3.arm-linux-ld 鏈接命令
3.arm-linux-gcc編譯命令
4arm-linux-objdump -h test 查看符號
-d 反匯編
5arm-linux-as ls.S -o ls.o 將匯編原文件編譯成.o文件
6arm-linux-objcopy -I elf32-littlearm-O binary test test.bin 去掉二進制文件elf頭。
現(xiàn)在我們來寫一個arm裸板的LED閃燈程序非常簡單的。
源代碼 led_test.c
void main()
{
int i=0;
volatile long *GPKCON0 = 0x7F008800;
volatile long *GPKDAT = 0x7F008808;
volatile long *GPKPUD = 0x7F00880C;
*GPKCON0 &= ~(0XFFFF <<16);
*GPKCON0 |= (0X1111 <<16);
while(1){
*GPKDAT &= ~(0XF <<4);
i=0xfffff;
while(i--)
;
*GPKDAT |= (0XF <<4);
i=0xfffff;
while(i--)
;
}
}
每隔大概3秒鐘的時間LED閃爍一次。非常簡單的一個程序。這里沒有使用定時器啊 什么的知識簡單的做循環(huán)來延時。注意 關(guān)于LED 的GPIO相關(guān)寄存器地址根據(jù)你自己的實際情況來。
編譯過程
1 編譯
arm-linux-gcc-c -march=armv4 test.c -o test.o
2.鏈接
arm-linux-ld -Ttext=50008000 test.o -o test //注意這個鏈接地址不要鏈接到你arm開發(fā)板不能提供的內(nèi)存地址。
3 去掉elf頭信息
arm-linux-objcopy -I elf32-little -O binary test test.bin
這樣 我們需要的LED裸板閃燈代碼就生成了。
現(xiàn)在我們通過任何你能夠使用的工具 把我們生成的 bin文件少些到ram的 0x50008000 這個地址。
然后讓在bootloader中執(zhí)行
bootm 0x50008000 看到你的燈閃木有。
注意arm-linux-gcc版本。由于arm-linux-gcc-4.x.x 不支持arm-linux-ld -Ttext 這個參數(shù)還是其他的,具體沒深入研究。會出錯。
只能使用arm-linux-gcc3.x.x的版本 這一點一定要注意。我今天就是因為這個原因郁悶了半天。如果有誰知道4.x.x版本的具體原因請告訴我并萬分感謝
評論