start.S解析1

《朱老师物联网大讲堂》学习笔记

学习地址: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中的不用修改,

只需要在配置时修改就可以了,

还记得之前配置中有部分代码是关于不同架构的配置设置了吗?

你可能感兴趣的:(嵌入式,uboot,s5pv210,start.s)