姓名:张硕 学院:电子工程学院 学号:19020100006
转自:https://blog.csdn.net/qq_38612145/article/details/107632892
嵌牛导读:本文主要介绍了uboot目录内容包括uboot编译以及其目录分析。
嵌牛鼻子:嵌入式系统、uboot目录内容
嵌牛提问:uboot编译之前的检查步骤有哪些?
嵌牛正文:
uboot目录内容
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目录分析
各文件介绍
.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源代码的主Makefile
mk:脚本语言,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比较重要,后面分析会涉及。