您的位置:首页 > 其它

运行时域和加载时域(运行地址和加载地址)

2017-07-10 17:38 183 查看
参考文章:http://blog.csdn.net/yam_killer/article/details/7909308

最近在学习ARM裸机开发遇到了运行地址和加载地址的定义:

在编写链接脚本的适合,会涉及到运行地址和加载地址的定义,如果程序是在flash里运行,则运行地址和加载地址是相同的。如果程序是在ram里运行,但程序是存储在flash里,则运行地址指向ram,而加载地址是指向flash(这里的flash指的是Nandflash)。

看一个简单的例子:

SECTIONS {   

 firtst 0x00000000 : { head.o init.o }   

 second 0x30000000 : AT(4096) { main.o }   

}

        以上,head.o放在0x00000000地址开始处,init.o放在head.o后面,他们的运行地址也是0x00000000,即连接和存储地址相同(没有AT指定);main.o放在4096(0x1000,是AT指定的,存储地址)开始处,但是它的运行地址在0x30000000,运行之前需要从0x1000(加载处)复制到0x30000000(运行处),此过程也就用到了读取Nand flash。这就是存储地址和连接(运行)地址的不同,称为加载时域和运行时域,可以在.lds连接脚本文件中分别指定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  arm