分类: LINUX
2011-07-23 11:02:48
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愉快!