在执行make xxx的时候会自动产生 autoconf.mk和autoconf.mk.dep
看看这两个文件如何产生,有什么作用
autoconf.mk里面全部是配置。
CONFIG_CMD_CRC32=y
CONFIG_SYS_LONGHELP=y
CONFIG_SYS_LOAD_ADDR=0x1000000
CONFIG_SYS_CPU="arm1176" 等等
autoconf.mk.dep里面全部是autoconf.mk依赖的一些包含文件。
include/autoconf.mk: include/common.h \
/home/route/Desktop/ubo/u-boot-pi/include/config.h \
/home/route/Desktop/ubo/u-boot-pi/include/config_cmd_defaults.h \
执行make首先就是包含
sinclude $(obj)include/autoconf.mk.dep (包含了include/autoconf.mk目标)
sinclude $(obj)include/autoconf.mk (包含了配置)
$(obj)include/autoconf.mk: $(obj)include/config.h
@$(XECHO) Generatingxxx $@ ; \
set -e ; \
: Extract the config macros ; \
$(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h | \
sed -n -f tools/scripts/define2mk.sed > $@.tmp && \
mv $@.tmp $@
依赖于之前执行的make xxx_config的include/config.h
实际执行的命令是
arm-linux-gnueabihf-gcc -E -g -Os -fno-common -ffixed-r8 -D__KERNEL__ -Iu-boot-pi/include -fno-builtin -ffreestanding -nostdinc -isystem lib/gcc/arm-linux-gnueabihf/4.8.3/include -pipe -DCONFIG_ARM -D__ARM__ -marm -mno-thumb-interwork -mabi=aapcs-linux -Wall -Wstrict-prototypes -fno-stack-protector -Wno-format-nonliteral -Wno-format-security -fstack-usage -DDO_DEPS_ONLY -dM include/common.h | \tsed -n -f tools/scripts/define2mk.sed > include/autoconf.mk.tmp
-dm指令是输出宏定义也就是将include/common.h进行预编译得到的宏给输出
#define machine_is_monch() (0)
#define machine_is_smdk2410() (0)
...
...
#define CONFIG_SYS_CPU "arm1176"
...
随后通过sed命令将 CONFIG_xxxx类型的变量以及相对应的值全部提取出来得到autoconf.mk
CONFIG_BOOTM_RTEMS=y
CONFIG_SYS_CBSIZE=1024
CONFIG_BOOTM_LINUX=y
CONFIG_CMD_CONSOLE=y
CONFIG_SYS_CPU="arm1176"
下面是产生autoconf.mk.dep的指令
$(obj)include/autoconf.mk.dep: $(obj)include/config.h include/common.h
autoconf.mk.dep依赖于 config.h common.h
@$(XECHO) Generating DEP $@ ; \
set -e ; \
: Generate the dependancies ; \
$(CC) -x c -DDO_DEPS_ONLY -M $(CFLAGS) $(CPPFLAGS) \
-MQ $(obj)include/autoconf.mk include/common.h > $@
arm-linux-gnueabihf-gcc -x c -DDO_DEPS_ONLY -M -g -Os -fno-common -ffixed-r8 -D__KERNEL__ -I/home/route/Desktop/ubo/u-boot-pi/include -fno-builtin -ffreestanding -nostdinc -isystem /lib/gcc/arm-linux-gnueabihf/4.8.3/include -pipe -DCONFIG_ARM -D__ARM__ -marm -mno-thumb-interwork -mabi=aapcs-linux -Wall -Wstrict-prototypes -fno-stack-protector -Wno-format-nonliteral -Wno-format-security -fstack-usage -g -Os -fno-common -ffixed-r8 -D__KERNEL__ -Iu-boot-pi/include -fno-builtin -ffreestanding -nostdinc -isystem /lib/gcc/arm-linux-gnueabihf/4.8.3/include -pipe -DCONFIG_ARM -D__ARM__ -marm -mno-thumb-interwork -mabi=aapcs-linux -MQ include/autoconf.mk include/common.h > include/autoconf.mk.dep
其中 -DDO_DEPS_ONLY 也就是处理这样的定义语句
#ifdef DO_DEPS_ONLY
xxx
#endif
-M表示产生依赖关系
比如
gcc -M test.c
结果为
test.o: test.c /usr/include/stdc-predef.h
再加上 -MQ 表示指定依赖的目标名称
gcc -M -MQ 1234.mk test.c
1234.mk: test.c /usr/include/stdc-predef.h
-MQ include/autoconf.mk include/common.h 把这些依赖放到autoconf.mk.dep里面,找出common.h的依赖并且指定目标名称为include/autoconf.mk
这样就得到了如下的结果。
include/autoconf.mk: include/common.h \
/home/route/Desktop/ubo/u-boot-pi/include/config.h \
/home/route/Desktop/ubo/u-boot-pi/include/config_cmd_defaults.h \
/home/route/Desktop/ubo/u-boot-pi/include/config_defaults.h \
/home/route/Desktop/ubo/u-boot-pi/include/configs/rpi_b.h \
/home/route/Desktop/ubo/u-boot-pi/include/asm/sizes.h \
这就是autoconf.mk的产生和autoconf.mk.dep的产生