最近在看优龙270的bootloader——boot270,这个bootloader只能既能boot wince也能boot linux,是英特尔自己写的,优龙修改的。
boot270里面跟uboot一样也要进行内存搬移,搬移的时候就需要用到Image$$RO$$Limit之类的数据。
带$$的变量是ADS的保留变量,在ADS link guide中能够看到,在源文件中是没有的,好像在link的时候产生的。
看了网上讲的关于Image$$RO$$Limit怎么算的文章:
http://z86k.blog.163.com/blog/static/90796156201002511040829/
网上大部分是这个版本
说是:
|Image$$RO$$Base| = Image entry point = 0x0c100000 ;表示程序代码存放的起始地址 |Image$$RO$$Limit|=程序代码起始地址+代码长度+1=0x0c100000+Tatal RO size+1
我的Image entry point = 0xA000 0000
代码编译情况:
Code RO Data RW Data ZI Data Debug
57960 155433 4722 9699 250684 Grand Totals
======================================================
Total RO Size(Code + RO Data) 213393 ( 208.39kB)
Total RW Size(RW Data + ZI Data) 14421 ( 14.08kB)
Total ROM Size(Code + RO Data + RW Data) 218115 ( 213.00kB)
======================================================
按上面的方法计算的话应该是(218115d = 0x35403):
0xA000 0000+0x3 5403+1=0x0xA003 5404
但是我在工程的输出Image Symbol Table中看到:
Global Symbols
Symbol Name Value Ov Type Size Object(Section)
Image$$RO$$Limit 0xa00341b4 Number 0 anon$$obj.o ABSOLUTE
Image$$RW$$Base 0xa2000000 Number 0 anon$$obj.o ABSOLUTE
说明Image$$RO$$Limit=0xa00341b4,这与上面计算的结果不符合,不知道到底哪个正确?