看过编译原理的人都知道咱们一句简略的arm-linux-gcc抵达做了哪些作业。他并不是简略的把咱们的原文件编译成咱们可履行的二进制文件,在这个进程中他其实至少做了两部作业。“编译”和链接“当然这其间包含了许多关于编译原理的至少,由于自己孤陋寡闻说以也只可以简略的把他说成编译和链接了。假如需求跟深化的了解请查找相关”编译原理的书本吧“
这儿咱们先介绍一下常用的GCC指令.
1.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头。
现在咱们来写一个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闪耀一次。十分简略的一个程序。这儿没有运用定时器啊 什么的常识简略的做循环来延时。留意 关于LED 的GPIO相关寄存器地址依据你自己的实际情况来。
编译进程
1 编译
arm-linux-gcc-c -march=armv4 test.c -o test.o
2.链接
arm-linux-ld -Ttext=50008000 test.o -o test //留意这个链接地址不要链接到你arm开发板不能供给的内存地址。
3 去掉elf头信息
arm-linux-objcopy -I elf32-little -O binary test test.bin
这样 咱们需求的LED裸板闪灯代码就生成了。
现在咱们经过任何你可以运用的东西 把咱们生成的 bin文件少些到ram的 0x50008000 这个地址。
然后让在bootloader中履行
bootm 0x50008000 看到你的灯闪木有。
留意arm-linux-gcc版别。由于arm-linux-gcc-4.x.x 不支持arm-linux-ld -Ttext 这个参数仍是其他的,详细没深化研究。会犯错。
只能运用arm-linux-gcc3.x.x的版别 这一点必定要留意。我今日便是由于这个原因抑郁了半响。假如有谁知道4.x.x版别的详细原因请告诉我并万分感谢