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) |