免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3265 | 回复: 2
打印 上一主题 下一主题

[BootLoader] 对uboot的理解....和疑惑? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-02 18:09 |只看该作者 |倒序浏览
我按照别人的历程做的,移植uboot,下载到ram中能运行到这一步了,我的疑问是移植到这一步,基本算是小进步了,如果想要启动内核,还要加nand驱动,然后加载内核。。。

个人理解:
     如果设置从nor启动uboot的话,是uboot把自己从nor复制到ram中,然后进入ram中执行板子各个硬件初始化,进入循环命令模式,可以烧写别的的文件到nand中,当然也可以启动系统。
    如果设置从NAND启动uboot的话,是uboot把自己在nand中的前4k的bootloader从nand读到到ram中,然后复制其余代码到ram中,然后在ram中执行板子各个硬件初始化,然后加载内核,文件系统等等....
    不知道理解对不对,大家指导下....
  
      还有一些不明白的如下:
    我移植到识别nor和网卡,然后移植完nand,下一步该怎么做?比如天嵌那种uboot
      加入是从nand启动,uboot被加载到ram中后,那是如何加载内核的呢?
    还有关于内核的移植,那里的代码定义了uboot的位置,内核的位置,那些在nand中位置是怎么和uboot的进行联系起来的呢?
    引导内核貌似是要参数传递,环境变量配置什么的.... 我移植的是2.6.38内核,具体参数在哪里定义呢,没找到啊。。。

论坛徽章:
0
2 [报告]
发表于 2011-09-02 21:15 |只看该作者
你的理解是对的。

启动了uboot,其运行过程,最后是会去调用
... -> main_loop -> run_command,然后会去运行你之前设置的bootcmd,比如这种:
#define CONFIG_BOOTCOMMAND        "nand read 0x32000000 0x60000 0x300000; bootm 0x32000000"

对应的就是去nand中读取kernel数据到ram中,然后跳转到对应位置,运行Linux。

nand中内核数据的位置与uboot的关系:
uboot只负责从某个nand位置读取数据。
这个位置放着kernel的数据,是由你自己决定的,理论上来说,任何位置都可以。一般都是放在比较靠前的位置,是blocksize的倍数,比如这里的0x60000。对应的nand中存放的数据的layout,可以参考一下之前写的这个:
【解答】内核kernel以及根文件系统rootfs是如何映射到对应的nand flash的地址的
http://hi.baidu.com/serial_story ... 3fdd3fadafd546.html

论坛徽章:
0
3 [报告]
发表于 2011-09-02 22:11 |只看该作者
回复 2# crifan


    多谢高手热心的解答,小弟受益匪浅啊。呵呵!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP