当前位置: 技术问答>linux和unix
u-boot Makefile的一段话不是很能理解
来源: 互联网 发布时间:2017-03-14
本文导语: $(obj)lib/asm-offsets.s: $(obj)include/autoconf.mk.dep $(src)lib/asm-offsets.c @mkdir -p $(obj)lib $(CC) -DDO_DEPS_ONLY $(CFLAGS) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR)) -o $@ $(src)lib/asm-offsets.c -c -S 这是u-boot-2012.07版本的顶层M...
$(obj)lib/asm-offsets.s: $(obj)include/autoconf.mk.dep
$(src)lib/asm-offsets.c
@mkdir -p $(obj)lib
$(CC) -DDO_DEPS_ONLY
$(CFLAGS) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR))
-o $@ $(src)lib/asm-offsets.c -c -S
这是u-boot-2012.07版本的顶层Makefile,根据GCC 参数解释 -DDO_DEPS_ONLY应该相当于#define DO_DEPS_ONLY "1"
而include/asm-offsets.h的内容为
#ifndef DO_DEPS_ONLY
#include
/* #include */
#endif
在编译的时候已经定义了宏DO_DEPS_ONLY,那么asm-offset.h就不会被包含了。 但是start.s又必须包含generated/generic-asm-offsets.h这个头文件,感觉很迷惑?
希望有人能解答
$(src)lib/asm-offsets.c
@mkdir -p $(obj)lib
$(CC) -DDO_DEPS_ONLY
$(CFLAGS) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR))
-o $@ $(src)lib/asm-offsets.c -c -S
这是u-boot-2012.07版本的顶层Makefile,根据GCC 参数解释 -DDO_DEPS_ONLY应该相当于#define DO_DEPS_ONLY "1"
而include/asm-offsets.h的内容为
#ifndef DO_DEPS_ONLY
#include
/* #include */
#endif
在编译的时候已经定义了宏DO_DEPS_ONLY,那么asm-offset.h就不会被包含了。 但是start.s又必须包含generated/generic-asm-offsets.h这个头文件,感觉很迷惑?
希望有人能解答
|
编译之后,会发现 uboot利用asm-offsets.c 生成了asm-offset.s。
顶层Makefile里面里有一项的是
generated/generic-asm-offsets.h :asm-offset.s
当条件符合的时候,执行tool/scripts/make-asm-offsets
则生成了generated/generic-asm-offsets.h
里面其实主要是定义了两个宏GENERATED_GBL_DATA_SIZE (gd)和 GENERATED_BD_INFO_SIZE(bd)的大小
是为了利用C语言的SIZEOF来取得这2个全局变量的大小 最后转成让汇编可以识别的语句
顶层Makefile里面里有一项的是
generated/generic-asm-offsets.h :asm-offset.s
当条件符合的时候,执行tool/scripts/make-asm-offsets
则生成了generated/generic-asm-offsets.h
里面其实主要是定义了两个宏GENERATED_GBL_DATA_SIZE (gd)和 GENERATED_BD_INFO_SIZE(bd)的大小
是为了利用C语言的SIZEOF来取得这2个全局变量的大小 最后转成让汇编可以识别的语句