1.在学习uboot之前,我们需要知道到底什么是uboot?
Universal Boot Loader,普遍的引导程序。是非常常用的一个引导程序,可作为主流系统的引导程序,如OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris等等,当然同时也支持多种常见的cpu处理器,如MIPS、 x86、ARM、NIOS、XScale等。
u-boot是一种普遍用于嵌入式系统中的Bootloader,Bootloader是在操作系统运行之前执行的一小段程序,通过它,我们可以初始化硬件设备、建立内存空间的映射表,从而建立适当的软硬件环境,为最终调用操作系统内核做好准备。BootLoader的作用就是把内核映像从硬盘(例如Nand Flash)读到RAM中,然后跳到内核入口处执行,即启动操作系统。每次嵌入式系统在上电或者复位的时候都是从地址0x00000000处执行,这个地址处安排的就是BootLoader程序。
2.uboot的目录结构
接下来介绍的是u-boot-2010.06往后版本的目录结构。u-boot目录结构,相比老版本,新版本
- cpu与lib_arch合二为一,命名arch
- 增加include folder
- 分离出通用库文件夹lib
u-boot-2010.06往后版本的各目录结构含义如下表:
目录名 | 主要内容 |
---|---|
api | uboot中的接口函数 |
arch | uboot中有关处理器架构相关的代码 |
board | 为开发板定制的相关代码 |
common | 通用代码,大部分与命令行有关 |
disk | 磁盘分区相关代码 |
doc | 有关README.txt相关代码 |
drivers | 与驱动程序相关代码 |
examples | 示例程序 |
fs | 文件系统,适合大部分开发板上的文件系统 |
include | 包含全局的头文件 |
lib | 通用库文件 |
net | 网络相关的代码,小型的协议栈 |
post | Power On Self Test,上电自检程序 |
tools | 辅助程序,用于编译和检查uboot目标文件 |
总结一下,从目录结构上看,u-boot在移植过程中有两个经常需要动到的/arch和/board目录。作为一名初学者,或者还没有涉及到u-boot裁剪的话,我们尽力搞清楚这两个目录下的代码原理即可搞明白u-boot的工作流程。