Chinaunix首页 | 论坛 | 博客
  • 博客访问: 796732
  • 博文数量: 81
  • 博客积分: 612
  • 博客等级: 中士
  • 技术积分: 1216
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-03 14:38
个人简介

蝴蝶翅膀的力量,也许能够改变这个世界。

文章分类

全部博文(81)

文章存档

2020年(2)

2019年(2)

2018年(6)

2017年(2)

2016年(5)

2015年(7)

2014年(20)

2013年(12)

2012年(25)

分类: 嵌入式

2014-05-03 20:33:15

booter的链接地址总结(三种方法)
这里讲mips架构的,arm和其他架构,原理也类似。
第一种:
链接地址在RAM地址,booter在falsh启动,然后将代码段和数据段拷贝到ram(也就是链接地址)中,跳转到ram中执行。这种方法最容易理解,也最常见。

第二种:
链接地址和flash地址相同,对于mips来说,链接地址为0xbfc00000。将u-boot搬移到RAM后,为了正确访问全局变量,这些 全局变量的地址都需要从Flash的位置修改到RAM的位置。在定义了got(Global Offset Table)后,代码可以通过__got_start和__got_end找到全局变量的存放位置,将其修改为RAM的地址,这样访问全局变量就不会出 错。另外,跳转到RAM后,虽然函数的地址都在flash空间,但是由于booter不大,函数调用都是间接跳转,因此没有什么问题。

第三种:
链接地址固定为一个特殊的地址,比如为0xc0000000。样代码需要将内存地址进行TLB映射后才能访问。这种方法的好处是同一个 booter的bin文件,可以烧写到falsh的开头位置,也可以烧到flash的其他位置(双booter甚至多booter,用于booter调试,防止booter出错导致无法启动),也可以tftp加载到RAM运行和调试。
阅读(1027) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~