u-boot启动代码求教!

haust_wngx 2011-06-21 04:53:38
如题:最近在看u-boot,用的是s3c6410的板子,nandflash启动,现在有点迷惑的地方:

上电CPU从nand中copy代码4k代码到CPU内部sdram里面,然后依次执行start.o ,cpu_init.o,nand_cp.o....

start.s里面有一段:

copy_uboot_to_ram-->跳转到0xc7e00000(SDRAM)去执行代码


请问这段nand代码拷贝函数,拷贝的是整个uboot还是在CPU内部没有执行完剩下的代码?

要是COPY的是整个UBoot,岂不是CPU重新执行了两次start.o吗?

困惑啊
...全文
343 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
BugSu 2011-07-05
  • 打赏
  • 举报
回复
楼主请看这里:
http://blog.csdn.net/canjiangsu/article/details/6584791
yangming011 2011-06-27
  • 打赏
  • 举报
回复
一直困惑中,哪位大侠能写详细点,针对一个具体的芯片,比如2440,3250等。哪些是用户要做的,哪些是厂家做的
MAY 2011-06-27
  • 打赏
  • 举报
回复
受教了!
bjtea 2011-06-26
  • 打赏
  • 举报
回复
系统启动时,Nand flash存储器的前4K字节被自动全部载入到内部SRAM中,然后系统自动执行这些载入的引导代码。引导代码执行完毕后,自动跳转到SDRAM执行。SDRAM中的代码,就是由引导代码将NAND_FLASH中存储的操作系统引导(转移)过去的。
wolf25 2011-06-26
  • 打赏
  • 举报
回复
我也有过这样的疑问,后来看了一篇贴子,自己亲自试验后才搞明白,这些工作是需要你在链接文件中设置的。

如果你只想把剩下的代码copy到RAM,那你就需要把这部分单独放在NANDFALSH中,之后再在链接文件中对这段剩下的代码的执行域(也就是在RAM中的运行地址)进行设定,假如说运行在0x30000000。这样在你的copy代码中,你就需要把这一段程序,从Nandflash复制到0x30000000去,这样在跳转指令之后,程序会自动跳转到正确的地方去。
haust_wngx 2011-06-26
  • 打赏
  • 举报
回复
本人经过U-boot的内存MD命令查看,U-boot确实是拷贝的整个U-boot到内存的,而不是上面几个朋友说的拷贝剩下的部分,我认为9楼的说的是正确的。
bolin123 2011-06-25
  • 打赏
  • 举报
回复
因为三星的芯片内部rom没有固化代码,它启动时用nand控制器来实现搬运nand地址空间前4k的代码,前4K搬运的是uboot的汇编部分,和他的作用是初始化中断、时钟、缓存、工作模式和内存,最重要的他还有代码搬运的作用,他会把剩下c语言部分的代码搬运到内存中,然后再跳到那个地址去执行,以完成对外设的初始化。
haust_wngx 2011-06-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bluesea87 的回复:]
楼主,uboot是拷贝整个uboot到内存,然后再从入口再执行的,所以,部分代码执行是重复的,但是不是start全部的代码,start代码中,有判断当前pc在哪个位置(可以判断是否已经在内存中,若在,就不再拷贝,然后跳到主函数执行,不在内存,则拷贝uboot到内存,然后跳到入口),然后做不同操作的代码,楼主有兴趣可以去研究下
[/Quote]

谢谢这位大侠,解惑不少,呵呵!

另外还有个问题就是:

我要想跟踪调试u-boot的话是不是只能使用JTAG,S3C6440的板子只可以在cordeware(ADS)下面单步跟踪看代码?
有没有其他的更好的办法跟踪代码?
天亮后说晚安 2011-06-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lq651659889 的回复:]
就算norflash足够大一般也会将代码考到RAM中运行,RAM中的运行速度比norflash快,norflash只是片上执行。
[/Quote]+1
大于4M
lq651659889 2011-06-24
  • 打赏
  • 举报
回复
就算norflash足够大一般也会将代码考到RAM中运行,RAM中的运行速度比norflash快,norflash只是片上执行。
lys07962000 2011-06-23
  • 打赏
  • 举报
回复
关注中!!!
hfyinsdu 2011-06-23
  • 打赏
  • 举报
回复
看一下这个网页吧,可以肯定的是:1. 拷贝整个uboot到内存; 2.继续执行后面的代码,而不是从头执行。
http://topic.csdn.net/u/20110623/09/891a06f3-33c3-4603-b368-b804d24fc89f.html?90941
haust_wngx 2011-06-22
  • 打赏
  • 举报
回复
另外u-boot如果在norflash执行的话,norflash足够大的话,是不是u-boot就无需拷贝代码到sdram里面了,因为u-boot是可以在norflash内运行的;

nandflash就要拷贝跳转到sdram,不知道我的理解对不对?

haust_wngx 2011-06-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lq651659889 的回复:]
跳转执行时,是跳到要执行的代码段,这些应该先前就有设定的,也就是说执行过的在RAM里面是直接跳过的。
[/Quote]

谢谢!u-boot全部拷贝到SDRAM里面之后,跳转到TEXT_BASE=0xc7e00000执行,但是TEXT_BASE地方是整个u-boot代码吧?

如果执行的是剩下没有执行的代码,那么SDRAM的PC值是怎么得出的呢?
lq651659889 2011-06-22
  • 打赏
  • 举报
回复
跳转执行时,是跳到要执行的代码段,这些应该先前就有设定的,也就是说执行过的在RAM里面是直接跳过的。
haust_wngx 2011-06-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yiyaaixuexi 的回复:]
受制于nand flash的限制,启动代码只有4K大。前4K代码中只是初始化,初始化cpu ,sdram,nandflash,然后将uboot剩余的代码加载到内存,将pc跳转到需要的位置,再做其他的初始化工作,而后正常进入uboot。
[/Quote]

谢谢!我今天用md命令看了一下内存0xc7e00000地方的数据和0x0000起始的数据是一样的(都是u-boot.bin),COPY的应该是整个u-boot,但是不确定是不是跳转到0xc7e00000又是从start.o重新执行的,还是只执行的是剩余(没有在nandflash中执行)的代码?

bluesea87 2011-06-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 haust_wngx 的回复:]
引用 6 楼 leehh 的回复:
引用 5 楼 haust_wngx 的回复:

另外u-boot如果在norflash执行的话,norflash足够大的话,是不是u-boot就无需拷贝代码到sdram里面了,因为u-boot是可以在norflash内运行的;

nandflash就要拷贝跳转到sdram,不知道我的理解对不对?


基本是这样的。norflash倒不用什么足够大……
[/Quote]若在norflash中运行的话,必须要把date区设置到内存去,不然还是没法运行的
bluesea87 2011-06-22
  • 打赏
  • 举报
回复
楼主,uboot是拷贝整个uboot到内存,然后再从入口再执行的,所以,部分代码执行是重复的,但是不是start全部的代码,start代码中,有判断当前pc在哪个位置(可以判断是否已经在内存中,若在,就不再拷贝,然后跳到主函数执行,不在内存,则拷贝uboot到内存,然后跳到入口),然后做不同操作的代码,楼主有兴趣可以去研究下
hengshisu 2011-06-22
  • 打赏
  • 举报
回复
高手们过来帮小弟解解惑好吗 uboot问题:
http://topic.csdn.net/u/20110622/10/f2cbf51c-ebef-40a2-9f0c-ca47b507ddce.html
haust_wngx 2011-06-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 leehh 的回复:]
引用 5 楼 haust_wngx 的回复:

另外u-boot如果在norflash执行的话,norflash足够大的话,是不是u-boot就无需拷贝代码到sdram里面了,因为u-boot是可以在norflash内运行的;

nandflash就要拷贝跳转到sdram,不知道我的理解对不对?


基本是这样的。norflash倒不用什么足够大,512K的uboot就已经足够大了,……
[/Quote]

谢谢!

要是norflash启动,并在norflash内部运行u-boot(无需拷贝到SDRAM的话),是不是TEXT_BASE就必须要设为0x0000,就是PC上电复位后的PC值?
加载更多回复(2)

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧