start.S解析1

1、不简单的头文件包含

(1)#include<config.h>。config.h是在include目录下的,这个文件不是源码中本身存在的文件,而是配置过程中自动生成的文件。(详见mkconfig脚本)。这个文件的内容其实包含了一个头文件:#include  <configs/x210_sd.h>

(2)经过分析后,发现start.S中包含的第一个头文件就是:inclinclude/configs/x210_sd.h,这个文件是整个uboot移植时的配置文件。这个文件是整个uboot移植时的配置文件。这里面是好多宏。因此这个头文件包含将include/configs/x210_sd.h文件和start.S文件关联了起来。因此之后在分析start.S文件时,主要要考虑的就是x210_sd.h文件。

(3)#include<version.h>中包含了include/version_autogenerated.h,这个头文件就是配置过程中自动生成的。里面就一行内容:#define U_BOOT_VERSION的值是一个字符串,字符串中的版本号信息来自Makefile中的配置值。这个宏在程序中会被调用,在uboot启动过程中会串口打印出uboot的版本号,那个版本号信息就是从这来的。

(4)#include<asm/proc/domain.h>。asm目录不是uboot中的原生目录,uboot中本来是没有这个目录的,asm目录是配置时创建的一个符号链接指向asm-arm,proc目录指向proc-armv。所以原生目录是#include<asm-arm/proc-armv/domain.h>

(5)从这可以看出配置时创建的符号链接的作用,如果没有这些符号链接,则编译时通不过,因为找不到头文件。

思考:为什么start.S不直接包含asm-arm/proc-armv/domain.h,而要用asm/proc/domain.h。这样的设计主要是为了移植性。因为如果直接包含,则start.S文件和CPU架构(和硬件)有关了。可移植性差了。

猜你喜欢

转载自blog.csdn.net/weixin_40405692/article/details/84713566
今日推荐