uboot的autoconf.mk 以及mk.dep的产生

在执行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的产生










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值