1.uboot配置
-
uboot和Linux kernel等复杂项目,都不能直接编译,都要先配置才能编译。uboot具体配置方法为,进入uboot源码的根目录,在其下执行:
make x210_sd_config
执行配置命令后出现:
Configuring for x210_sd board...
说明配置好了,如果不是则是配置出错
2. uboot编译
-
编译之前要检查
arm-linux-gcc
对不对,检查过程分两步- 检查当前编译环境中有没有安装合适的
arm-linux-gcc
- 检查uboot根目录的makefile中编译器的设置是否正确(makefile文件中147行的
CROSS_COMPILE
是否为自己安装的交叉编译工具链)
检查无误后,在uboot根目录直接输入
make -j4
进行编译,-j4
的意思为四核编译,j2
则是两核编译 - 检查当前编译环境中有没有安装合适的
3. uboot目录分析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d3N0W1D1-1595908168204)(E:\我的坚果云\学习笔记\朱有鹏嵌入式\pic\image-20200725173625648.png)]
-
九鼎在以三星的uboot为原材料进行移植时,把三星版本中的很多文件夹和文件给删除掉了,减少了整体的文件数量,便于工作
-
各文件介绍
.gitignore
:git工具的文件,和uboot本身无关arm_config.mk
:是一个makefile文件,将在来某个makefile中会调用它CHANGELOG
:三个修改记录文件,记录了这个uboot项目的版本变迁以及每个版本较上个版本修改的记录config.mk
:和arm_config.mk
差不多性质COPYING
:版权声明,uboot本身是GPL许可证的CREDITS
:感谢对uboot贡献较大的人MAINTAINERS
:维护者,当前社区参与维护uboot源码的人MAKEALL
:一个脚本,帮助编译uboot的Makefile
:uboot源代码的主Makefilemk
:脚本语言,uboot快速编译的脚本,其实是先清理,然后配置和编译mkconfig
:是uboot配置阶段的主要配置脚本。uboot的可移植性很大程序靠这个配置脚本在维护mkmovi
:一个与iNand/SD卡启动有关的脚本README
:简单的使用说明书rules.mk
:uboot的makefile使用的规则,本身非常重要
以上文件中,
mkconfig
和makefile
两个文件,一个负责uboot配置,一个负责编译,比较重要,需要重点分析。 -
各文件夹介绍
api
:硬件无关的功能函数的API,uboot移植时基本不用管,这些函数是uboot本身使用的api_example
:API相关的测试实例board
:板的意思,文件夹下每一个文件都代表一个开发板,文件时用来描述每一个开发板的信息的。uboot的配置阶段(其实就是根目录下面的mkconfig脚本和makefile中配置有关的部分)主要解决的问题就是在可移植性领域能够帮助我们确定具体的文件夹路径,然后编译时找到对应的文件,才能编译成功。所以,board目录下的不同会造成配置时的不同,如果移植时不注意这里肯定会失败common
:文件夹下放的是一些与具体硬件无关的普适代码,包括控制台、CRC校验等,主要分为:cmd开头的,用来实现uboot的命令系统;env开头的,用来实现环境变量的cpu
:这个目录与SoC有关,里面存放的代码都是SoC相关初始化和控制代码(譬如CPU的、中断的、串口等内部外设的,包括起始代码start.S),每一个文件夹就是一个SoC系列disk
:磁盘有关的doc
:文档目录,里面存放了很多uboot相关文档,这些文档帮助理解uboot代码driver
:驱动,从Linux源代码中抠出来的原封不动的Linux设备驱动,主要是开发板上必须用到的一些驱动。uboot在一定程度上移植了Linux中的驱动examples
:示例代码fs
:文件系统,从Linux源代码中移植过来的,用来管理Flash等资源include
:头文件目录,uboot和Linux kernel在管理头文件时采用同一个思路,就是把所有的头文件全部集中存在的include目录下,而不是头文件跟着自己对应的c文件,所以在uboot中头文件包含时路径结构要在这里去找。lib_*
:架构相关的库文件。lib_arm
为arm架构使用的一些库文件;lib_generic
里面是所有架构通用的库文件。这类文件夹的内容移植时基本不用管libfdt
:设备树有关的,Linux内核在3.4左右的版本更改了启动传参的机制,改用设备树来进行启动传参,进行硬件信息的描述nand_spl
:nand相关的net
:网络相关代码onenand
:和onenand相关代码,,三星假的post
:sd_fusing
:里面代码实现了烧录uboot镜像到SD卡的代码tools
:工具类代码
文件夹中,
board
、common
、cpu
、drivers
、include
、lib_arm
、lib_generic
、sd_fusing
比较重要,后面分析会涉及