微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > uboot移植到S3C44B0X开发板的经历

uboot移植到S3C44B0X开发板的经历

时间:11-11 来源:互联网 点击:
(1) 事情来由

几个月前从朋友那里拿到了一块参考Micetek EV44b0-II开发板设计的板子,对其bootloader MBL感觉很不错. 朋友说可能是移植 u-boot的.但Micetek并没有提供MBL的源代码, 因此当时没有仔细去研究. 最近公司准备想做基于S3C44B0X CPU的产品,因此购买了杭州立宇泰公司()的armsys-c及armsys-b开发板和.armsys提供的 bootloader 是其公司自己开发的bootloader,觉得其USB这一块做的还可以,但利用USB下载调试uclinux是非常麻烦的,操作很不爽,其 bootloader也不提供网络下载调试.因此自己计划移植u-boot.

(2) 开始
由于没有接触过u-boot,因此第一步要做的就是google一些资料.
u-boot官方网站:http://sourceforge.net/projects/u-boot(比较慢)
http://u-boot.sourceforge.net/这个快一些.

DENX U-Boot及Linux使用手册: http://coosign.blogchina.com/coosign/1318487.html, 这是一遍翻译的文档.主要介绍了u-boot编译及使用的命令.但没有涉及新板子的移植流程.

到board目录查了一下:
#cd u-boot
#cd board
#find . -exec grep -l 44B0 {} \;
结果是:
./dave/B2/B2.c
B2网站是: ,初初看了B2开发板的介绍,但不详细.包括使用的网络芯片等都没有介绍.

google "u-boot 移植"后查到一篇文章:
"收集了一些关于U-BOOT的文章"
http://www.bloghome.cn/index.php?op=ViewArticle&articleId=2111&blogId=390

里面搜集了不少关于u-boot移植的问题.
里面介绍了"U-Boot 在44B0X 开发板上的移植以及代码分析"的内容,仔细看了看.发现其移植的版本比较低,但对了解u-boot结构是满不错的,因为这个版本不支持44B0X,因此完全是支持新CPU的移植.了解到 make XX_config是在Makefile中定义的.
另外"MPC8xx的U-Boot移植体会(ZT) "这一篇对u-boot介绍满详细的.但对移植工作只做了理论性和经验性介绍,没有具体的操作步骤.

"基于Atmel at91rm9200的armlinux的bootloader启动代码分析 "
http://www.linuxfans.org/nuke/modules.php?name=News&file=print&sid=2765
里面介绍了u-boot移植到at91rm9200上的情况,可以参考一下.

另外就是仔细阅读u-boot下的README文件.

(3) 编译一把
看了相关的资料,心动不如行动.先编译一把看看情况.既然只有B2开发板是S3C44B0X CPU的,因此先编译一下B2开发板看看. 具体:
#cd u-boot
#make B2_config
#make
结果顺利,成功编译.

(4) 开始动手移植
我以B2板子的程序做为模板来做.
#cd board
#cp -r dave wx (自己取个公司名wx)
#cd wx
#mv B2 wx20 (自己取个板子名wx20)
#cd wx20
# mv B2.c wx20.c
修改Makefile及wx20.c, 主要是B2改成wx20.

增加配置文件:
#cd include/configs
#cp B2.h wx20.h
修改Makefile配置文件,增加wx20_config.
1432 wx20_config : unconfig
1433 @./mkconfig $(@:_config=) arm s3c44b0 wx20 wx
[注:前面的数字是文件行号,以下一样].
将board/wx目录下和wx20.h文件中的B2改成wx20或WX20.

这里其实是最重要的步骤,就是根据硬件的情况来修改相关的参数.由于对硬件板子的情况不是太了解,因此此时最需要的就是耐心地看看硬件资料.主要修改的地方有:
include/configs/wx20.h ---- 配置文件,大部分参数是这里配置的.
board/wx/wx20/lowlevel_init.S -- 内存参数配置
cpu/s3c44b0/serial.c -- 串口配置
cpu/s3c44b0/start.S -- 程序入口

如果此时配置全部正确了,那么我们就简单的很了.(如果你用我的patch的话,就是如此了!)那么我也就不会仔细再去研究u-boot其他部分了. 困难就是你学习的最好机会!

(5) 开始编译
经过简单的参数修改,编译成功.然后下载u-boot.bin(二进制格式). 此时你可以用nm看一下u-boot(elf格式)的内容,会有所收获的.

然后用armsys的bootloader将u-boot.bin调入到内存0xc100000运行.结果可想而知,串口没有任何显示,而且死机.bootloader也必须断电重起.

(6) u-boot流程
原因是比较明显的,就是参数和硬件没有符合.因此接下来做的事情就是仔细阅读S3C44B0 CPU的硬件资料,包括内存配置,串口配置这些.我觉得要让串口出信息,最主要的就是CPU的初始化,内存配置和串口配置.另外就是了解u-boot程序运行流程,这个对了解需要设置的参数是非常有帮助的.我这里大致说一下u-boot运行流程.

入口: cpu/s3c44b0/start.S
主要是CPU初始化( cpu_init_crit 200), 调内存配置函数( lowlevel_init 200), 然后判断u-boot是否从flash运行,如果是就把u-boot代码拷贝到TEXT_BASE定义的地方.然后转到 start_armboot.

start_armboot: lib_arm/board.c
进行各种初始化设置,主要有:
cpu_init CPU相关的设置, 具体在./cpu/s3c44b0/cpu.c中.
board_init 板子相关的设置, 具体在board/wx/wx20/wx20.c 中

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top