微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > arm-linux连接以及连接脚本

arm-linux连接以及连接脚本

时间:11-10 来源:互联网 点击:

他们的运行地址也是0x00000000,即连接和存储地址相同(没有AT指定);main.o放在4096(0x1000,是AT指定的,存储地址)开始处,但是它的运行地址在0x30000000,运行之前需要从0x1000(加载处)复制到0x30000000(运行处),此过程也就用到了读取Nand flash。

编写好的.lds文件,在用arm-linux-ld连接命令时带-Tfilename来调用执行,如
arm-linux-ld –Tnand.lds x.o y.o –o xy.o。也用-Ttext参数直接指定连接地址,如
arm-linux-ld –Ttext 0x30000000 x.o y.o –o xy.o。

4. ARM汇编中实现跳转

由于会使用分散加载,因此在使用汇编实现跳转时应该注意。ARM汇编中,常有两种跳转方法:b跳转指令、ldr指令向PC赋值。

(1) b step1 :b跳转指令是相对跳转,依赖当前PC的值,偏移量是通过该指令本身的bit[23:0]算出来的,这使得使用b指令的程序不依赖于要跳到的代码的位置,只看指令本身。

(2) ldr pc, =step1 :该指令是从内存中的某个位置(step1)读出数据并赋给PC,同样依赖当前PC的值,但是偏移量是那个位置(step1)的连接地址(运行时的地址),因此不管最终程序在什么地方运行,所得到的都是同样的地址(绝对地址),所以可以用它实现从Flash到RAM的程序跳转。

参考资料:

1.arm-linuxbootloader预备之GNUld机理,http://blog.21ic.com/user1/1028/archives/2008/47653.html

2. 对.lds连接脚本文件的分析,http://blog.chinaunix.net/u1/58780/showart.php?id=462971

3. 用GNU工具开发基于ARM的嵌入式系统,http://blog.163.com/liren0@126/blog/static/32897598200821211144696/

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top