arm-linux连接以及连接脚本
他们的运行地址也是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/
arm-linux连接连接脚 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)