LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1337|回复: 8

烧写BOIS的疑问,有关RoBase的设置

[复制链接]
发表于 2010-3-21 16:42:32 | 显示全部楼层 |阅读模式
FS2410开发板光盘自带的BOIS,用ADS1.2编译

跳帽是插上去的。从NanaFlash启动了

SJF2410选择的是NanaFlash的芯片型号

RO Base设置成0x30100000时,用sjf2410将镜像烧到Nana Flash时,可以运行成功

反之,将RO Base设置成0x00000000时,无法运行成功

这是什么原因

上电复位时不是从地址0x00处开始运行吗?
发表于 2010-3-22 10:20:35 | 显示全部楼层
RO base 设置成 0x0 ,考虑到代码段是怎样布局的呢?RO Base设置成0x30100000时,可以运行,那想想,RO Base设置成0x0 程序是怎样执行的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-22 22:02:56 | 显示全部楼层
Post by xiang****wudu;2076949
RO base 设置成 0x0 ,考虑到代码段是怎样布局的呢?RO Base设置成0x30100000时,可以运行,那想想,RO Base设置成0x0 程序是怎样执行的?


地址为0x0是Nand flash
0x30100000处为SDRAM

上电复位时,PC是从0x0处开始执行的啊

ADS编译时设置Ro base为0x30100000 那start.s这个文件里
b ResetHandler这个语句 ResetHandler被翻译成以0x30100000为基址的一个绝对地址啊

但那时0x301000000处还没什么代码啊!

还请老兄指点迷津啊 这个问题缠绕我好几个星期了
回复 支持 反对

使用道具 举报

发表于 2010-3-23 09:38:44 | 显示全部楼层
板子上电是从0x0地址开始执行代码,再完成一些必要硬件初始化后,如需加速程序执行,会拷贝启动代码到SDRAM 中去,然后跳到RAM中执行,这就是你的0x30100000。如果设置Ro base为0x0,你要确保0x0处也是reset。按理来说,只读段可以在Nand 中执行。

也在学习中,理解不深入,如有问题,共同探讨。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-24 00:36:01 | 显示全部楼层
Nand flash 地址为0x0
SDRAM 地址为0x30100000

上电复位时,PC是从0x0处开始执行

ADS编译时设置Ro base为0x30100000  这样能运行成功,我试过了

start.s 文件里的第一句是 b ResetHandler

ResetHandler被编译成以0x30100000为基址的一个绝对地址


但那时0x301000000处还没什么代码,PC能跳过去执行吗?

优龙的bios 上qq传给你
我QQ108353616
回复 支持 反对

使用道具 举报

发表于 2010-3-24 15:41:50 | 显示全部楼层
看下你的启动代码中是否完成了RO段到RAM搬移的工作,当程序到执行到0x30100000时,RO base 已经在RAM中了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-26 22:28:48 | 显示全部楼层
Post by xiang****wudu;2077484
看下你的启动代码中是否完成了RO段到RAM搬移的工作,当程序到执行到0x30100000时,RO base 已经在RAM中了


其实是这样的
前4K代码要保证编译成与地址位置无关的。


兄台可知道,在ADS1.2中如何设置编译时是与地址位置无关的?
回复 支持 反对

使用道具 举报

发表于 2010-3-27 09:48:26 | 显示全部楼层
前4K代码要保证编译成与地址位置无关的 ??

我在Linux 平台下,不用IDE。IDE 貌似都是通过 Scatter file 完成各段布局。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-30 23:54:58 | 显示全部楼层
是用了相对地址跳转的指令了 如 b , bl
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表