uboot 编译解析

来源:互联网 发布:织梦404页面制作 编辑:程序博客网 时间:2024/06/10 05:10

1、makefile

MKCONFIG := $(srctree)/mkconfig
export MKCONFIG


%_config:: outputmakefile
@$(MKCONFIG) -A $(@:_config=)

#########################################################################
#   %代表着任意字符
#%_config目标后面是双冒号,而我们平常看的只有一个冒号,这个就是makefile 的双冒号规则了,
#而平常我们见的单冒号就是普通规则。Makefile 中规定:一个目标可以出现在多个规则中。
#但是这些规则必须是同一类型的规则,要么都是普通规则,要么都是双冒号规则。
#而不允许一个目标同时出现在两种不同类型的规则中。双冒号规则和普通规则的处理的不同点表现在以下几个方面:
#1. 双冒号规则中,当依赖文件比目标更新时。规则将会被执行。对于一个没有依赖而只有命令行的双冒号规则,
#   当引用此目标时,规则的命令将会被无条件执行。而普通规则,当规则的目标文件存在时,
#   此规则的命令永远不会被执行(目标文件永远是最新的)。
#2. 当同一个文件作为多个双冒号规则的目标时。这些不同的规则会被独立的处理,
#   而不是像普通规则那样合并所有的依赖到一个目标文件。这就意味着对这些规则的处理就像多个不同
#   的普通规则一样。就是说多个双冒号规则中的每一个的依赖文件被改变之后,make只执行此规则定义的命令,
#   而其它的以这个文件作为目标的双冒号规则将不会被执行。
 
#@的作用是在执行这条命令的时候不进行显示,$(MKCONFIG)是取变量MKCONFIG,
#由MKCONFIG := $(SRCTREE)/mkconfig这条语句知,就是当前目录下的mkconfig文件,
#$(@:_config=)的意思是,讲目标文件名字中含有的_config用等号后面的的字符替换掉,
#这里=后面为空,所以其效果就是把_config去掉
# 格式为“$(VAR:A=B)”(或者“${VAR:A=B}”),意思是:替换变量“VAR”中所有“A”字符结尾的字为“B”结尾的字。
#########################################################################

其实就是调用命令mkconfig -A am335x_evm

执行结果:

GEN     /home/fz/build/forlinx_uboot/Makefile
Configuring for am335x_evm - Board: am335x_evm, Options: SERIAL1,CONS_INDEX=1,EMMC_BOOT

outputmakefile就是在输出目录,生成一个makefile

mkconfig是一个shell脚本,最终的目的只用一个,根据boards.cfg文件里与am335x_evm匹配的board行所提供的参数Target Architecture  CPU  Board [VENDOR] [SOC]来产生一个config.hconfig.mk

config.huboot源码的顶层配置头文件,它包括了对uboot产生影响的所有配置选项

config.mkmake提供了几个变量,并根据boards.cfg中匹配行所提供的参数为这几个变量赋值,后面make将会用到的。


0 0
原创粉丝点击