这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 关于44BO的BIOS代码地址无关特性的疑问

共5条 1/1 1 跳转至

关于44BO的BIOS代码地址无关特性的疑问

菜鸟
2007-04-13 02:47:50     打赏

最近在研究44B0的BIOS,例程代码是优龙的开发板配套的FS44B0II_BIOS。在试验的过程中我发现有个很特殊的问题。

开发板自带的文档这样说:。。。BIOS的自身驻留地址位于NOR FLASH0x1f0000处,系统参数保存在0x1ff000以上区域中。所以在烧写完BIOS,上电复位后先要执一定要执行backup命令把BIOS本身拷贝到NOR FLASH的高端1f0000去。。。。 Src 目录中的44binit.s 文件于原开发板所带的其它原码中的44binit.s 文件不同,不可被替换。工程中指定的ro-base 0x0c7c000,不要改为0。。。。

这就奇怪了,编译起始地址为0x0c7c000,这个地址在开发板中是SDRAM的范围内的,而实际使用时却是烧录到00x1f0000开始的FLASH空间内。按理说这样程序会跑飞的,但事实是程序并没有跑飞!!而且同样的BIOS程序可以在00X1F0000起始的地址空间内正常运行!!!

我不明白其中的道理,在网上查资料发现如下说法:bootloader是基于相对地址的,也就是说与地址无关,而这也是对bootloader的一个基本要求。一般的bootloader都设计成地址无关的。

那我猜这个BISO也是与地址无关的了!这只是我的猜测,不一定正确,而且具体的实现机理也一无所知,那位大侠可以介绍一下?

[align=right][color=#000066][此贴子已经被作者于2007-4-12 19:21:14编辑过][/color][/align]



关键词: 关于     代码     地址     无关     性的     疑问    

菜鸟
2007-04-13 17:57:00     打赏
2楼

与地址无关是初始化代码的常见要求,特别是在作relocate之前。这样在链接时可以用RAM地址,而程序可以从flash开始运行并把自己copy到RAM.


菜鸟
2007-04-13 20:12:00     打赏
3楼
ryansheng:能说是具体实现方法吗?

菜鸟
2007-06-24 07:29:00     打赏
4楼

我用的44B0板子 ,老师给了个优龙的BIOS,我看了说明,也是一样的说明。

我也不太懂。


菜鸟
2007-06-26 08:06:00     打赏
5楼

刚启动时,有一小段代码是在Flash中运行的,之后运行以下代码:

adr r0, ResetEntry
ldr r2, BaseOfROM
cmp r0, r2
ldreq r0, TopOfROM
beq InitRam
ldr r3, TopOfROM
0
ldmia r0!, {r4-r7}
stmia r2!, {r4-r7}
cmp r2, r3
bcc %B0

sub r2, r2, r3
sub r0, r0, r2

InitRam
ldr r2, BaseOfBSS
ldr r3, BaseOfZero
0
cmp r2, r3
ldrcc r1, [r0], #4
strcc r1, [r2], #4
bcc %B0

mov r0, #0
ldr r3, EndOfBSS
1
cmp r2, r3
strcc r0, [r2], #4
bcc %B1

程序就复制到预定的链接地址处了,以下两条语句直接转到SDRAM中运行,所以当然不会跑飞了。

ldr lr, GotoMain
MOV_PC_LR

一般只要不是用绝对地址,都不会与链接地址有关吧


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]