cortex-a8 uboot系列: 第三章 uboot初体验
0赞一、 配置
1. Uboot和linux
Uboot和kernel等复杂项目,都不能直接编译,都要先配置才能编译。
2. Uboot配置
第一步:cd进入uboot源码的根目录
第二步:make x210_sd_config
后面的x210_sd_config,是在uboot源码根目录下的Makefile中得到的,,make后,就会生成针对于x210开发板的配置文件,这些配置文件会被uboot调用,最终生成在x210开发板上运行的uboot.bin。
3. Uboot编译得到uboot.bin
编译之前一定要检查交叉编译工具arm-gcc是否安装正确,检查分两步:
第一步:检查当前编译环境中有没有安装合适的arm-linux-gcc,装的是arm-2009q3,因为这个是三星官方、九鼎官方开发uboot时使用的。
第二步:检测uboot根目录下的Makefile中编译器的设置是否正确。在工程的总Makefile中有设置交叉编译工具链的路径和名字,必须确保路径和名字和系统安装的一致。
确保以上两点,即可编译。
直接make编译就行了。
make –j2(多线程编译,主机如果是多核心电脑,可以尝试多线程编译,会快一些,后面的数字和你的电脑的几核有关系)
编译完成后,查看u-boot.bin大小。
二、 Uboot
1. Uboot文件介绍
1) .gitignore: git工具的忽略文件,git是一个版本管理工具。uboot代码是利用git来进行管理的。
2) arm_config.mk: 后缀是.mk,是一个Makefile文件,将来在某个Makefile中会去调用它
3) 三个Changelog文件,修改记录文件,该文件记录了这个uboot项目的版本变迁以及每个版本较上个版本修改的记录。主要给维护uboot的人使用。
4) config.mk:和arm_config.mk性质一样,提供调用
5) COPYING: 版权声明,uboot本身是GPL许可证的。
6) CREDITS: 鸣谢,里面记录了对uboot有贡献的人。
7) image_split: bash脚本,对镜像进行分割,从u-boot.bin中分割出bl2.bin
8) MAINTAINERS: 维护者,当前参与维护uboot源码的社区工作者
9) MAKEALL: bash脚本,帮助编译uboot的脚本
10) Makefile: 编译uboot生成uboot.bin的makefile
11) mk: 快速编译脚本,直接./mk就可以编译uboot
12) mkconfig: uboot配置阶段的主要配置脚本。Uboot的可移植性很大程序就是靠这个配置脚本。
13) mkmovi: 也是一个脚本,生成iNand的uboot.bin
14) README: 使用说明书
15) rules.mk: uboot的Makefile使用规则
总结:以上这些文件中,比较重要的是Makefile,mkconfig这两个文件,一个负责编译,一个负责uboot的配置。
2. uboot文件夹介绍
1) api: 硬件无关的功能函数的api,uboot移植时不需要修改,这些函数是uboot本身使用的。
2) api_examples: api相关的测试实例代码
3) board: board文件夹下每一个文件都代表一个具体的开发板,这个文件夹下面放的文件就是用来描述这一个开发板的信息。为了使编译能够使用开发板的信息,需要进行配置。
Uboot的配置(其实就是根目录下的mkconfig脚本和Makefile中配置相关的部分)主要解决的问题就是在可移植性领域能够帮助我们确定具体的文件夹的路径,然后编译时可以找到应该找到的文件,才能编译成功。
4) common: 通用的目录,文件夹下放的是与硬件无关的通用使用的代码。一种是cmd开头c代码(用来实现uboot的命令系统),一种是env开头的c代码(用来实现环境变量的 ),还有一些其他的。
5) CPU: Soc相关的,里面的代码都是与Soc相关初始化和控制代码,如CPU的中断、串口、内存控制、FLASH控制等,还包括其实的start.S。x210使用的是s5pc11x。
这个文件夹是严格和硬件相关的,移植的时候要注意。但是因为这个和soc相关的,不同的开发板只要使用的核心soc一样,那自己移植的时候,基本上不用修改,
6) disk:磁盘相关的代码
7) doc: uboot的相关文档
8) drivers: 里面放的就是linux源代码中提取出来的linux设备驱动,主要是开发板上必须用到的一些驱动,如网卡驱动,flash驱动等。
Uboot中的驱动就是linux中的驱动,uboot在一定程序上移植了linux的驱动给自己用。
9) example: 示例代码
10) fs: 文件系统,从linux中移植过来,用来管理flash等资源。
11) include: 头文件目录
uboot和linux kernel管理头文件是采用同一个思路,就是把所有的头文件全部集中存放在include目录下,而不是头文件跟着自己对应的c文件。所以uboot中头文件包含时路径结构就在这个include目录中找。
12) lib_xxx: xxx的头文件,典型的lib_arm和lib_generic,架构相关的库文件。lib_arm里面是arm架构使用的库文件,官方会写好,不需要自己修改。lib_generic里面是所有架构通用的库文件。
13) libfdt: 设备树有关的,linux内核在3.4左右的版本的时候更改了启动传参的机制,改用设备树来启动传参,进行硬件信息的描述。
14) nand_spl: nand相关的代码
15) net: 网络相关的代码
16) onenand_xxx: onenand相关的代码,三星自己加的。
17) post:
18) sd_fusing: 刷写SD卡,实现烧录uboot镜像到SD卡的代码。
19) tools: uboot有关的工具代码,如mkimage
总结:文件夹里面重要的有:board,common,cpu,drivers,include,lib_arm,lib_generic,sd_fusing。