u-boot 学习指南
Version Author Date Modify
V1.0 SixRoom 2010/11/3 创建文件
V1.1 SixRoom 2011/4/27 增加如何添加 c 文件的说明
u-boot 是免费的,我们做嵌入式的一般只需要使用 u-boot 即可,但如果你想成为一个比
较强的嵌入式系统工程师,而且还做了自己开发板,那么还是要学习一下如果将网上下载的
通用 u-boot 移植到自己的开发板上,这个过程主要是修改主芯片相关代码以及开发板硬件
相关代码,包括启动文件 Start.s、NAND 读写程序、USB 通信程序、相应的 IO 口配置等开
发板上的资源,毕竟做 u-boot 这个开源项目的人不可能知道你用的是什么开发板,所以只
能做个通用应用程序,然后再由做板的人去移植 u-boot。
我这里不讲移植,因为博芯已经为 SEP4020 和 MINI4020 移植好了 u-boot,其实移植
u-boot 也属于 BSP 的一部分,汤云峰和顾祥龙就是做这块的,我们只说如何使用 u-boot,或
者说如何修改别人移植好的 u-boot 来满足自己的需求。
一、Uboot结构
要修改一个裸跑程序(u-boot 也是一个裸跑程序,只不过非常大罢了),首先要搞懂一
个程序的执行流程。对任何一个嵌入式项目工程而言,都会由以下几部分组成:
1. 启动文件:一般为 start.s 或者 startup.s,是在进入 main()函数之前对开发板的初始
化程序,一般功能是初始化堆栈、开启 MMU、打开中断、初始化中断向量表等,
这个在学习 ARM 编程后会有所了解,在启动文件的最后一句一般是挑战到__main
去执行,也即进入 main()函数。
2. 主函数(不一定是 main 函数)和子函数:这个不用说了。
3. 中断服务子程序:在 u-boot 中一般不使用中断,就目前为止我见到的 uboot 中都是
没有中断的,所以这块也不需多说了。
二、修改文件
因此我们只需要搞定启动文件和主函数就行了,两个文件的位置:cpu/arm920t/start.s,
lib_arm/board.c。这里建议使用 SourceInsight 这款软件来看代码,因为 u-boot 中代码错综复
杂,即使把执行流程全部给你写出来你也不一定能在整个 u-boot 文件夹中找到每个想要函
数,而 SI 能帮你解决这个问题,只要选中某个函数,SI 就会自动的在整个文件中目录中搜
索此函数的实体定义,并显示在屏幕下方的窗口中。以后在看内核源码、文件系统以及其它
开源项目代码(madplay、web 服务器等)时,也尽量使用 SI,否则会无从下手。
2.1 start.s
在 flash 中执行的引导代码,负责初始化硬件环境,把 u-boot 从 flash 加载到 RAM 中去,