您的位置 首页 系统

arm 裸板程序编译进程

看过编译原理的人都知道我们一句简单的arm-linux-gcc到达做了哪些工作。他并不是简单的把我们的原文件编译成我们可执行的二进制文件,在这…

看过编译原理的人都知道咱们一句简略的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版别的详细原因请告诉我并万分感谢

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/xitong/277070.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部