uboot移植(一)——uboot源码目录分析

   本文分析的uboot是九鼎官方提供的,是对应s5pv210开发板x210bv3的uboot
一:uboot的概念及移植的原理。

uboot就是在内核运行前的一段小程序,用来初始化硬件设备,建立内存空间映射图。从而将系统的软硬件带到合适的状态,主要功能就是为了启动内核,它将内核从flash中拷贝到ddr中,然后跳转到内核入口中,交由内核控制权,uboot严重依赖硬件,因此一个通用的uboot不太可能。

移植原理:uboot中有很多平行代码,各自属于各自不同的架构/CPU/开发板,当我们具体到某一款开发板的时,编译的时候通过创建符号链接的方法来选择具体的哪一个文件夹/文件进行编译,这样就可以在配置的时候通过不同的配置来使用不同的文件,就可以实现可移植性。


二:uboot中个文件介绍

1:.gitignore:git工具文件,这个文件和git工具有关和我们的uboot本身无关。

2:arm_config.mk:一个Makefile文件,后面会有某个Makefile会调用它。

3:CHANGELOG  Changelog_Samsung  CHANGELOG-before-U-Boot-1.1.5  三个Changelog文件,这几个文件用来记录uboot的版本变迁和版本的修改

4:config.mk:一个Makefile文件,等待被调用,该文件里面的TEXT_BASE指定了代码在内存中的地址

5:COPYING:版权声明

6:CREDITS:鸣谢

7:p_w_picpath_split:一个脚本,用于分割uboot.bin到BL1

8:MAINTAINERS:维护者

9:MAKEALL:一个脚本,是帮助编译uboot的

10:Makefile:是uboot源代码的主Makefile,将来整个uboot被编译时就是用这个
Makefile管理编译的。后面会单独分析

11:mk:快速编译的脚本,里面的内容是 make  distclean  make x210_sd_config make -j4,也就是清理->配置->编译

12:mkconfig:是uboot配置阶段的主要配置脚本,这个脚本根据传入的不同SOC/开发板的参数来创建对应的符号链接,是uboot实现可移植性的关键。后面会单独分析

13:mkmovi:一个和iNand/SD卡启动有关的脚本
14:README:读我,一个简单的说明文档(纯英文)
15:rules.mk:uboot的Makefile使用规则文件

三:uboot的源码目录分析

1:api:

硬件无关的功能函数的API。uboot移植时基本不用管,这些函数是uboot本身使用的。

2:api_examples:

API相关的测试事例代码。

3:board

本文件下的子文件与开发板相关,每一个子文件代表一个芯片厂家,芯片厂家文件夹下存放的每一个子文件夹是一种开发板,由于历史原因,board目录下尚保留有大量的开发板文件夹没有归档到芯片厂家文件夹内,保持兼容性,因此整体显得比较混乱。如samsung的smdk2400、smdk2410开发板就位于samsung文件夹外。

  S5PV210芯片对应的文件夹位于board/samsung/x210,文件夹内的lowlevel_init.S文件主要用于时钟、串口、MMU、Flash底层驱动、板级初始化,u-boot.lds文件是链接脚本文件,对于工程项目编译后期的链接阶段非常重要,决定了程序的组装


4:common

    本文件夹下存放与处理器体系结构无关的通用代码,uboot的命令解析代码/common/command.c、所有命令的上层代码cmd_*.c、uboot环境变量处理代码env_*.c、CRC校验等都位于本目录下。


5:drivers

    本目录下存放所有外围芯片的驱动,网卡、USB、串口、LCDNand Flash等。


6:disk

    本目录存放于磁盘驱动的分区处理代码

7:fs

    本目录下存放文件系统相关的代码,每一个子文件夹代表一种文件系统。


8:net

    本目录下存放于网络协议相关的代码。

9:doc

    本目录下存放uboot的说明文档。


10:include

    头文件,包括各种CPU的寄存器定义,文件系统、网络等等

         configs子目录下的文件是与目标板相关的配置头文件,后面mkconfig文件中创建的符号链接都在该目录下面。


11:lib_xxx

    lib_arm、lib_avr32lib_blackfin、lib_generic、lib_i386lib_m68klib_microblazelib_mipslib_nioslib_nios2lib_ppclib_shlib_sparc

每一个文件夹代表一种CPU体系架构。与S5PV210相关的文件夹有lib_armlib_generic,lib_generic目录存放的是各CPU体系架构通用的加密算法、压缩算法、字符处理相关代码。在每一种CPU体系架构文件夹内都存在board.c,是uboot启动第二阶段代码入口函数和相关初始化函数存放的地方。


12:libfdt

    本目录下存放的是设备数相关的代码。


13:tools

    编译S-Record或uboot映像等相关工具,如制作bootm引导的内核映像文件工具mkp_w_picpath源码。


14:post

    上电自检相关代码


15:nand_spl、onenand_bl1、onenand_ipl

    Nand、onenand启动相关的代码。


16:sd_fusing

本目录下存放的是烧录相关的工具代码