免费注册 查看新帖 |

Chinaunix

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

u-boot移植,其实需要的是坚持 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-10 19:17 |只看该作者 |倒序浏览
前一段时间在公司做了一个u-boot移植,用的是u-boot-1.2.0版本,移植到powerpc的处理器平台。由于这个平台是一个成熟的网络路由器产品,所以不用考虑硬件是否有错误。
      开始移植,查了很多资料,读了很多文章。大概知道u-boot是啥了,工作过程是啥了,最终结果是啥了。然后开始看u-boot代码的基本架构,用到的主要有:board、cpu、common等文件夹的内容。其他的post文件夹啥的,不用看。当然,common文件夹其实不用咋改,一般是可以直接用的。
       先来看看板子上的cpu吧,是mpc8541。上board文件夹里找吧,看上mpc8541cds了,就用这个!不着急改代码,先来测试一下u-boot-1.2.0版本的mpc8541cds在我的板子上能否测试通过吧!做法如下:
      打开cygwin命令行,输入make MPC8541CDS_config 回车,会打印信息:显示正在配置板子。完成后输入make回车,就开始编译,OK,u-boot-1.2.0版本的MPC8541CDS目标板编译通过!下一步,开始看代码吧。
       我做的u-boot比较特殊,由于是成熟的产品,板子上有两个flash,一个nor,一个nand的,nor flash里已经有一个bootloader代码,用于启动用,此板上电后,自动先运行这个代码,完成板子的初始化,包括初始化内存,就是说,内存已经可以用啦。我要做的是把u-boot放在nand flash里面,上电启动,会把u-boot代码下载到内存运行。按公司的说法,nor里面的bootloader是小版本,nand flash里面放的是大版本。我要做的就是大版本代码。说明完毕,现在开始看代码。
     首先,当然是start.s这个文件,u-boot代码运行起来后,第一步就会运行start.s文件。由于我的u-boot特殊性,不是代码不是从start文件的开头执行的,是从标号start处开始执行的。之前的部分是不执行的。不过也来讲一下之前的部分代码:先来一个版本的比较,然后是使无效一些诸如cache之类的寄存器,配置向量表偏移,基址。还有一个特别注意,就是mmu的寄存器。这个比较重要。OK,开始说标号为start处开始的代码。
      先清零一些寄存器,如定时器等,这里关键的一个bl cpu_init_f ;bl board_init_f.函数名记不清了,大概是这两个。我把cpu_init_f注释掉了,因为小版本已经初始化了这个。重点看board_init_f。这里最重要的就是把串口先起来了,一般调试串口,只要注意一下你的串口频率设置,还有板子的频率,设置对了,串口一般没什么问题。board_init_f函数执行到最后,会进行代码搬移,之后就不会返回到调用的地方执行。原因是,在代码搬移的末尾,用blr指令,把存储下一指令地址的寄存器内容改了。改到哪里了?改到内存相应的位置了。可能你要问了,这个内存的位置设置在哪里?可以随便你自己定,但是一定要留出堆栈空间,全局数据结构空间等,够用就行。这个在board_init_r函数里就体现出来了。boar_init_r函数就是做这个预留各个空间处理的。board_init_r函数进行到最后,就出现一个进入main_loop函数。这个main_loop函数就在common文件里面。
      晕了,我发现做过u-boot之后,想写出来,还是有点困难。我的文学修养很不够!当初高中语文很失败,不过语文课上,练就了我的一手好字体,也算没有白上语文课。总之,知道时间是不能浪费的就OK。
      大家一起讨论u-boot吧,还是一个很不错的代码。在我看来,可以与linux代码相媲美,代码让人看起来很爽。~[转载请注明嵌入式先生,谢谢合作]


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/65694/showart_1858358.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP