u-boot源码配置原理分析
2012-10-18 14:17
399 查看
u-boot的源代码默认是不针对任何目标平台的,当我们要移植u-boot到一个特定的目标平台时,需要生成针对目标平台的配置文件。u-boot目前已经支持的芯片可以在include/configs/下面找到。比如我们要编译针对s3c2410芯片的u-boot.bin,那么我们就需要在u-boot源码根路径下执行:
make smdk2410_config
这样我们的u-boot源码就是针对smdk2410平台了。(注:smdk2410是三星专门为其arm9芯片s3c2410做的referenceboard,即参考板,国内大部分基于s3c2410的开发板都是参考smdk2410来做的)
那么,makesmdk2410_config背后到底了做了什么工作呢?u-boot是如何生成针对smdk2410平台的配置的?下面我们就来分析这一过程。由于make命令会调用Makefile,所以我们要分析这个Makefile里面相关的部分。
smdk2410_config是u-boot源码根路径下的Makefile的一个目标,相关的代码如下:
smdk2410_config : unconfig
@$(MKCONFIG)$(@:_config=) arm arm920t smdk2410 NULL s3c24x0
unconfig:
@rm-f $(obj)include/config.h $(obj)include/config.mk \
$(obj)board*/config.tmp
在执行makesmdk2410_config的时候会先执行unconfig目标,负责清理掉以前的配置信息。然后就会执行@$(MKCONFIG)$(@:_config=) arm arm920t smdk2410 NULLs3c24x0,MKCONFIG是Makefile的一个变量,定义如下:
MKCONFIG :=$(SRCTREE)/mkconfig
可见,MKCONFIG就是源码顶级目录下的mkconfig文件,这个文件是一个shell脚本程序,所以在执行makesmdk2410_config的时候,系统就会执行mkconfig这个脚本,arm arm920t smdk2410 NULLs3c24x0则是传递个这个脚本的五个参数。
mkconfig这个脚本程序实际上就为我们生成了两个文件,一个是include/config.h,另一个是include/config.mk。我们可以在makesmdk2410_config之前看一下include下面是没有这两个文件的。config.h里面只有一句话:
#include<config/smdk2410.h>
其实就是为我们包含了目标平台的配置头文件。另一个文件config.mk里面则有如下内容:
ARCH = arm
CPU= arm920t
BOARD= smdk2410
SOC= s3c24x0
其实这里面定义了四个变量,分别是体系结构(arm)、处理器核(arm920t)、目标板(smdk2410)、片上系统(s3c24x0)。
上面的这个include/config.mk文件会在Makefile里面被包含,对应的代码如下:
ifeq($(OBJTREE)/include/config.mk,$(wildcard$(OBJTREE)/include/config.mk))
# load ARCH, BOARD, and CPUconfiguration
include$(OBJTREE)/include/config.mk
exportARCH CPU BOARD VENDOR SOC
也就是说,Makefile会判断include下面有没有config.mk这个文件,如果有就包含这个文件,这就相当于在Makefile里面定义了ARCH、CPU、BOARD和SOC这四个变量。这样u-boot就知道自己是针对哪个目标平台的了。
在u-boot顶层目录下面也有一个config.mk文件,这个文件里面主要定义了交叉编译器选项及编译规则:
# load other configuration
include$(TOPDIR)/config.mk
那么这个config.mk和include下的config.mk就包含了我们编译u-boot时的所有信息。其实关键就是include下的config.mk文件,Makefile包含这个文件以后就知道目标平台的信息了。
make smdk2410_config
这样我们的u-boot源码就是针对smdk2410平台了。(注:smdk2410是三星专门为其arm9芯片s3c2410做的referenceboard,即参考板,国内大部分基于s3c2410的开发板都是参考smdk2410来做的)
那么,makesmdk2410_config背后到底了做了什么工作呢?u-boot是如何生成针对smdk2410平台的配置的?下面我们就来分析这一过程。由于make命令会调用Makefile,所以我们要分析这个Makefile里面相关的部分。
smdk2410_config是u-boot源码根路径下的Makefile的一个目标,相关的代码如下:
smdk2410_config : unconfig
@$(MKCONFIG)$(@:_config=) arm arm920t smdk2410 NULL s3c24x0
unconfig:
@rm-f $(obj)include/config.h $(obj)include/config.mk \
$(obj)board*/config.tmp
在执行makesmdk2410_config的时候会先执行unconfig目标,负责清理掉以前的配置信息。然后就会执行@$(MKCONFIG)$(@:_config=) arm arm920t smdk2410 NULLs3c24x0,MKCONFIG是Makefile的一个变量,定义如下:
MKCONFIG :=$(SRCTREE)/mkconfig
可见,MKCONFIG就是源码顶级目录下的mkconfig文件,这个文件是一个shell脚本程序,所以在执行makesmdk2410_config的时候,系统就会执行mkconfig这个脚本,arm arm920t smdk2410 NULLs3c24x0则是传递个这个脚本的五个参数。
mkconfig这个脚本程序实际上就为我们生成了两个文件,一个是include/config.h,另一个是include/config.mk。我们可以在makesmdk2410_config之前看一下include下面是没有这两个文件的。config.h里面只有一句话:
#include<config/smdk2410.h>
其实就是为我们包含了目标平台的配置头文件。另一个文件config.mk里面则有如下内容:
ARCH = arm
CPU= arm920t
BOARD= smdk2410
SOC= s3c24x0
其实这里面定义了四个变量,分别是体系结构(arm)、处理器核(arm920t)、目标板(smdk2410)、片上系统(s3c24x0)。
上面的这个include/config.mk文件会在Makefile里面被包含,对应的代码如下:
ifeq($(OBJTREE)/include/config.mk,$(wildcard$(OBJTREE)/include/config.mk))
# load ARCH, BOARD, and CPUconfiguration
include$(OBJTREE)/include/config.mk
exportARCH CPU BOARD VENDOR SOC
也就是说,Makefile会判断include下面有没有config.mk这个文件,如果有就包含这个文件,这就相当于在Makefile里面定义了ARCH、CPU、BOARD和SOC这四个变量。这样u-boot就知道自己是针对哪个目标平台的了。
在u-boot顶层目录下面也有一个config.mk文件,这个文件里面主要定义了交叉编译器选项及编译规则:
# load other configuration
include$(TOPDIR)/config.mk
那么这个config.mk和include下的config.mk就包含了我们编译u-boot时的所有信息。其实关键就是include下的config.mk文件,Makefile包含这个文件以后就知道目标平台的信息了。
相关文章推荐
- u-boot源码配置原理分析
- u-boot源码配置原理分析
- u-boot源码配置原理分析
- Tiny210 U-BOOT(三)----配置时钟频率源码分析
- redis源码分析(一)复习redis命令、持久化方案、主从同步原理、配置
- springboot源码分析3-springboot之banner类架构以及原理
- Tiny210(S5PV210) U-BOOT(三)----配置时钟频率源码分析
- 【Spring】Spring的IOC(控制反转)/DI(依赖注入)原理(三):Spring启动加载配置文件源码分析
- 【Spring Boot 系列 自动配置原理分析】
- 三星uboot-1.1.6源码分析——lowlevel_init.S (2)——时钟配置
- Spring实现原理分析(二十五).Spring Boot如何把application.*中的配置数据转换成对象
- springboot源码分析14-ApplicationContextInitializer原理Springboot中PropertySource注解多环境支持以及原理
- 通过实例及源码分析关于SpringBoot启动类启动时自动配置问题
- Spring实现原理分析(二十五).Spring Boot如何把application.*中的配置数据转换成对象
- SpringBoot源码分析之环境和配置文件的加载
- 第四章、TIny4412 U-BOOT移植四 配置时钟频率源码分析【转】
- 【mybatis源码分析】原理分析之三:初始化(配置文件读取和解析)
- Tiny210(S5PV210) U-BOOT(三)----配置时钟频率源码分析
- u-boot源码配置分析
- 第四章、TIny4412 U-BOOT移植四 配置时钟频率源码分析