《朱老师物联网大讲堂》学习笔记
学习地址:www.zhulaoshi.org
先来个引子,又因为引子比较短,就直接放下面了,
#include <config.h> #include <version.h> #if defined(CONFIG_ENABLE_MMU) #include <asm/proc/domain.h> #endif
#include<config.h>,
config.h在include目录下,
这个文件是在配置中自动生成的(详见mkconfig脚本文件)的文件,
config.h又包含一个头文件,#include<configs/x210_sd.h>,
start.S包含的“第一个”头文件是config.h,
因为再次包含的缘故,其实包含第一个头文件是include/configs/x210_sd,
x210_sd这个文件是整个uboot移植时的配置文件,里面有好多宏,
宏中为移植进行了很多判断,
突然一看x210_sd,我想大多数人以为我们用的是sd呢,
其实就是因为uboot配置所致,至少在这里不是因为这,
#include<version.h>,本身没什么东西,
这个头文件里面包含了一个include/version_autogenerated.h,
这个头文件就是配置过程中自动生成,里面只包含了一个关于版本号宏,
内容是#define U_BOOT_VERSION “U-Boot 1.3.4",
这个版本信息来自于Makefile中的配置值,还记得之前不久对这个版本的分析吗?
这个版本号的值是有好几个变量结合起来的,不是直接就这样一个变量就定了的,
这个版本信息在启动uboot打印的那串信息中,可以体现出来,
#if defined(CONFIG_ENABLE_MMU)
#include <asm/proc/domain.h>
#endif
这个宏怎么看呢?
在IS中点击这句代码,会提示它的出处,
if判断为真后,
将会包含中间那个头文件<asm/proc/domain.h>,
这个目录不是uboot中的原生目录,
是配置的时候创建的一个符号链接,
实际指向的是asm-arm(详见mkconfig那节),
即include/asm-arm/proc/domain.h,
干嘛要通过符号链接来绕一圈,好急人~
其实这是为了可移植性,要说的是,联系越紧密,可移植性就越差,
比如我们要移植到mips架构,则start.S源代码中所有的头文件就全部要修改,
用了符号链接之后,则start.S中的不用修改,
只需要在配置时修改就可以了,
还记得之前配置中有部分代码是关于不同架构的配置设置了吗?