最近在研究44B0的BIOS,例程代码是优龙的开发板配套的FS44B0II_BIOS。在试验的过程中我发现有个很特殊的问题。
开发板自带的文档这样说:。。。BIOS的自身驻留地址位于NOR FLASH的0x1f0000处,系统参数保存在0x1ff000以上区域中。所以在烧写完BIOS,上电复位后先要执一定要执行backup命令把BIOS本身拷贝到NOR FLASH的高端1f0000去。。。。 Src 目录中的44binit.s 文件于原开发板所带的其它原码中的44binit.s 文件不同,不可被替换。工程中指定的ro-base 为0x0c7c000,不要改为0。。。。
这就奇怪了,编译起始地址为0x0c7c000,这个地址在开发板中是SDRAM的范围内的,而实际使用时却是烧录到0和0x1f0000开始的FLASH空间内。按理说这样程序会跑飞的,但事实是程序并没有跑飞!!而且同样的BIOS程序可以在0和0X1F0000起始的地址空间内正常运行!!!
我不明白其中的道理,在网上查资料发现如下说法:bootloader是基于相对地址的,也就是说与地址无关,而这也是对bootloader的一个基本要求。一般的bootloader都设计成地址无关的。
那我猜这个BISO也是与地址无关的了!这只是我的猜测,不一定正确,而且具体的实现机理也一无所知,那位大侠可以介绍一下?