编译实践
一、关于uboot的源码编译生成uboot.bin
1、我用的是朱有鹏老师的课程所以我有官方已经移植好的uboot源码所以我只是讲一下
uboot编译的过程和结果。(这是源码解压包的名称 qt_x210v3_130807.tar.bz2)
2、配置:
(1)、uboot和linux kernel等复杂项目,都不能直接编译,都需要先配置才能编译。
(2)、先进入uboot源码的根目录,然后在根目录下执行:make x210_sd_config。
(3)、如果出现Configuring for x210_sd_board...那么配置成功。
配置成功。
3、编译得到uboot.bin
(1)、检查当前编译环境中有没有安装合适的arm-linux-gcc。我们装的是arm-2009q3,
因为这个是三星官方、九鼎官方开发uboot时使用的。
(2)、检查当前目录下(uboot根目录)的Makefile中编译器的设置是否正确。在工程的
总Makefile中会设置交叉编译工具链的路径和名字,必须确保这个路径和名字和我
们自己装的一致,否则编译会出错。
(3)、确保了以上2点,即可进行编译。编译很简单,直接make即可。或者可以make -j4
(多线程编译,主机如果是多核心电脑,可以尝试多线程编译,会快一些)。
可以在倒数第二列的最面看见我们编译生成的uboot.bin。
目录分析
1、九鼎官方uboot和三星原版uboot对比
2、不同版本的uboot或者同一版本不同人移植uboot,可能目录结构和文件内容都有所不同。
3、九鼎在以三星的uboot为原材料进行移植时,把三星原版中很多不必要的文件夹都删除了。
减小不必要的文件,可以减小整体的文件数量,便于工作。
二、关于文件内容简介
1、.gitignore。git工具的文件,git是一个版本管理工具(类似的还有个svn),这个文件和git有关,
和uboot本身无关的,不用去管。
2、arm_config.mk。后缀是.mk,是一个Makefile文件,将来在某个Makefile中会去调用它。
3、三个Changlog文件,修改记录文件,改文件记录了这个uboot项目的版本变迁以及每个版本。正
式的项目都有这些记录的。可以直接忽略,主要是给维护人员用的。
4、config.mk。和arm_config.mk差不多性质。
5、COPYING。版权声明,uboot本身是GPL许可证。
6、CREDITS。鸣谢,里面记录了对uboot有贡献的人,感谢目录。
7、image_split。一个脚本,看说明是用来分割uboot.bin到BL1的,暂时用不到。
8、MAINTAINERS。维护者,就是当前在参与维护uboot源码的社区工作者。
9、MAKEALL。一个脚本,应该是帮助编译uboot的。
10、Makefile。这个很重要,是uboot源代码的主Makefile,将来整个uboot被编译时就是用Makefile
管理编译的。
11、mk。快速编译的脚本,其实就是先清理然后配置然后编译而已。
12、mkconfig。这个很重要,是uboot配置阶段的主要配置脚本。uboot的可移植性很大程度就是靠
这个配置脚本在维护的。
13、mkmovi。暂时不去管他,一个脚本,和iNand/SD卡启动有关。
14、README。所有的软件都有README,一般拿到一个东西要先读README,这个东西其实就是
个简单的使用说明书。
15、rules.mk。这个文件是我们uboot的Makefile使用的规则,本身非常重要,但是我们不去分析他,
不去看他。
16、api. 硬件无关的功能函数的API。uboot移植时基本不用管,这些函数是uboot本身使用的。
17、api_examples. API相关的测试实例代码。
18、board。board是板的意思,板就是开发板。board文件夹下每一个文件就代表uboot曾被移植
到。
20、CPU。这个目录是SoC相关的,里面存放的代码都是SoC相关初始化和控制代码。每个子文件
都是一个系列的SoC的初始化。
21、disk。和磁盘相关的。
22、doc。文档目录,里面存放了很多uboot相关文档。这些文档可以帮助我们理解uboot代码。
23、drivers。顾名思义,驱动。这里放的就是从linux源代码中抠出来的原封不动的linux设备驱动,
主要是开发板上必须用到的一些驱动。主要是开发板上必须用到的一些驱动。uboot中的驱动
是linux驱动的一部分。
24、example。示例代码,没用过。
25、fs。filesystem,文件系统。这个也是从linux源代码中移植过来的,用来管理Flash等资源。
26、以lib_开头的一些文件,(典型的lib_arm和lib_generic)架构相关的库文件。譬如lib_arm里面
就是arm架构使用的一些库文件。lib_generic里是所有架构通用的库文件。这类文件夹中的内容
移植时基本不用管。
27、libfdt。设备树有关的。linux内核在3.4左右的版本的时候更改了启动传参的机制,改用设备树来
进行启动传参,进行硬件信息的描述了。
28、nand_spl。nand相关的,不讲。
29、net。网络相关的代码,譬如uboot中的tftp nfs ping命令 都是在这里实现的。
30、onenand开头的,是onenand相关的代码,是三星加的,标准uboot中应该是没有的。
31、post。没关注过,不知道干嘛的。
32、sd_fusing。这里面代码实现了烧录uboot镜像到SD卡的代码。后面要仔细研究的。
33、tools。里面是一些工具类的代码。譬如mkimage。
总结:以上这些文件中,比较重要的是mkconfig和Makefile。
欢迎各位指出不足之处