这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » s3c2410的 bootloader设计请教?

共9条 1/1 1 跳转至

s3c2410的 bootloader设计请教?

菜鸟
2009-10-18 23:04:42     打赏
ADS想自己弄一个简单bootloader,主要想练练手,对bootloader以及s3c2410有更深入的了解而目的。
我现在有个地方想不明白:
RO BASE=0x00000000
程序烧写到了Nand Flash 了,
阶段1把所有的Bootloader程序从Nand Flash拷贝到SDRAM里头了。SDRAM的物理地址是0x30000000,然后跳转阶段2(ldr pc, GotoMain)。
RO BASE设置成了0x00000000那么程序转移到SDRAM后物理地址是0x30000000,能保证程序正常运行吗?万一代码是位置有关的怎么办?会不会出现问题。
这个问题一般用什么办法解决?
我看了板子自带bootlaoder的代码,但是没有发现怎么弄得?反正运行正常。ro base 也是0x00000000,不是SDRAM的起始地址 0x30000000。这个问题郁闷了好长时间了,看了很多帖子,没有召见涉及这个问题。



关键词: s3c2410     bootloader     设计     请教    

院士
2009-10-19 13:42:03     打赏
2楼
没人懂?

菜鸟
2009-10-19 18:34:01     打赏
3楼
一天了都没有人回答,好郁闷啊!
高手都去那儿了?

菜鸟
2009-10-19 21:34:04     打赏
4楼
自己回答一下吧:
第一种方法:
  RO BASE:0x30000000,然后阶段1的代码全部写成位置无关的代码,这样拷贝到SDRAM后就挣正常运行了。
 
第二种方法:
  RO BASE:0x00000000,拷贝到SDRAM 把SDRAM的地址空间通过MMU重定向成0x00000000开始的空间。

这种方法对不?  还有其他方法吗?

菜鸟
2009-10-20 14:09:30     打赏
5楼
可以运行,因为SRAM的地址映射了,LODEBOOT后就从SRAM的启动,从地址映射机制

菜鸟
2009-10-20 19:36:59     打赏
6楼
如果
RO BASE=0x00000000
程序烧写到了Nand Flash 了
那么,只要从0地址开始的前4KB的程序的功能能够把Nand Flash 余下的程序(数据)copy到ram里就行了,copy完后程序从0x30000000的ram里运行...

你所指的与位置有关的代码是指什么呢?
通过映射,相对位置是不变的

菜鸟
2009-10-20 21:13:07     打赏
7楼
位置有关代码的意思是:

 ldr pc,0x30000000

那么在内存的0x30000000必须有你要运行代码才可以,否则跳转也没有用啊,这就是位有关代码。

位置无关代码:

b label1


labe1:
   ******
这段代码虽然也是跳转,但是它放到内存的那个位置也能正常运行。

菜鸟
2009-10-21 13:46:02     打赏
8楼
启动后NANDFLASH的头4K拷贝到SRAM里,而不是SDRAM,
SRAM的地址是0x00000000开始,所以“RO BASE=0x00000000”就可以了,
没有那个代码需要位置无关的要求

菜鸟
2009-10-23 01:49:00     打赏
9楼
程序一般设计成与位置无关
否则不好实现程序的组合、动态加载和映射...

共9条 1/1 1 跳转至

回复

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