最大化我的市场价值
全部博文(113)
2013年(113)
分类: LINUX
2013-02-24 22:31:37
Uboot在ARM开发中的移植,网上的移植攻略很多,良莠不齐,不免让人眼花缭乱,弄得一头雾水。对于初学者(注:笔者也是初学者哈…),笔者认为,要想真正熟练掌握uboot在ARM核上的移植工作,应该从以下几个阶段去实践:
一、抄袭
针对自己手头的开发板,寻找一个前人已经移植成功的,且与自己想实现的功能比较接近的uboot,对其直接编译下载,验证运行结果是否与作者描述的一致,如果一致,接下来就可以认真研究作者是如何完成了移植工作。
二、研究
对作者的移植源码进行分析,相比于官网发行的uboot版本,观察作者的版本进行了哪些修改,可以使用diff指令来实现比较。在已经了解uboot启动流程的基础上,深入理解针对本开发板,作者在官网发行的uboot的基础之上做了哪些修改。可以针对解压源码的文件和文件夹(以u-boot-2009.08为例),详细地列出一个清单,凸显出作者如何进行的移植工作。如下表1所示:
目录
移植方式
涉及的文件
board
添加
添加 \gy
添加 \gy\**2440
common
修改
cmd_load.c
cmd_mem.c
cmd_mmc.c
cmd_nand.c
serial.c
cpu
修改|添加
\arm920t\s3c24x0\interrupts.c
\arm920t\s3c24x0\Makefile
\arm920t\s3c24x0\mmc.c --- 添加
\arm920t\s3c24x0\speed.c
\arm920t\s3c24x0\timer.c
\arm920t\s3c24x0\usb.c
\arm920t\s3c24x0\usb_ohci.c
\arm920t\config.mk
\arm920t\start.S
drivers
修改|添加
\i2c\s3c24x0_i2c.c
\mtd\nand\nand_base.c
\mtd\nand\nand_util.c
\mtd\nand\s3c2410_nand.c
\net\dm9000x.c
\rtc\s3c24x0_rtc.c
\serial\serial_s3c24x0.c
\usb\host\ohci-hcd.c
\vedio\cfb_console.c
\vedio\Makefile
\vedio\s3c2410_fb.c --- 添加
\vedio\videomodes.c
\vedio\videomodes.h
include
修改|添加
\asm-arm\arch-s3c24x0\mmc.h --- 添加
\asm-arm\arch-s3c24x0\regs-sdi.h --- 添加
\configs\mini2440.h --- 添加
\linux\mtd\mtd.h
common.h
mmc.h
part.h
s3c24x0.h
s3c2410.h
serial.h
lib_arm
修改
board.c
net
修改
bootp.c
bootp.h
net.c
nfs.c
rarp.c
sntp.c
tftp.c
根目录
修改
Makefile
表1 移植清单
认真分析源码,深入理解作者移植工作的来龙去脉,为以后自己的移植工作打下坚实的基础。
三、实践
有了前面的准备工作,我们就可以针对自己的开发板,针对不同版本的uboot量身定制自己的uboot移植了。恰当选择一个合适的uboot版本和编译工具链,针对自己想实现的功能,详细罗列一个清单,然后一个功能一个功能地去实现,例如:
1.LED有指示,串口有数据输出;
2.液晶console有LOGO;
3.支持网络功能;
4.支持usb下载功能;
5.添加MMC|SD卡、USB驱动;
6.支持基于ram、flash存储设备的文件系统:ramdisk、initramfs、yaffs|yaffs2、jffs|jffs2等;
7.对内核的引导。
如果没有十足的把握,切忌一股脑将所有的代码都修改完了再去debug各个功能的实现,这样只会增加调试的难度。
四、创新
根据自己的工作需要,发挥自己的聪明才智,更加巧妙的实现各种功能,或者添加前人未实现的新功能,让uboot的功能更加完善。
五、总结
好记性不如烂笔头,理论与实践紧密结合,在移植工作中不断归纳总结,积累经验,定能熟能生巧。在再现别人的移植成果的过程中,有必要了解对方选择了怎样的主机环境、u-boot版本、编译工具、集成开发环境、硬件支持(开发板)等。遇到了问题,戒骄戒躁,度娘、谷哥之,或者到各大论坛发帖求助,或者找有经验的同事、同学和老师求助,只要自己有信心有决心,我相信问题都会迎刃而解的。
以上,是我个人的一些粗浅心得,欢迎各位朋友留言批评指正。祝大家学习、使用linux愉快!