内核中的一些宏定义找不到
我用Source Insight 看内核代码:在drivers\pinctrl\Pinconf.h中有一行代码:#if defined(CONFIG_PINCONF) && defined(CONFIG_DEBUG_FS)
想问一下各位:CONFIG_PINCONF,CONFIG_DEBUG_FS这些宏是那里定义呢?
我在整个代码下执行:grep -nr "CONFIG_PINCONF"
drivers/pinctrl/Makefile:7:obj-$(CONFIG_PINCONF) += pinconf.o
drivers/pinctrl/pinconf.h:14:#ifdef CONFIG_PINCONF
drivers/pinctrl/pinconf.h:61:#if defined(CONFIG_PINCONF) && defined(CONFIG_DEBUG_FS)
include/linux/pinctrl/pinconf.h:15:#ifdef CONFIG_PINCONF
只找到上面的内容。
CONFIG_PINCONF,CONFIG_DEBUG_FS这些宏是那里定义呢?
内核中还有很多类似这样的宏定义,请问都是在那定义呢? 回复 1# lzjz80
编译内核的时候,需要先生成配置文件。这些定义都在内核配置文件里。
OK,明白了,谢谢了。{:1_1:} 回复 3# lzjz80
{:qq11:}
在make silentoldconfig的过程中,会调用scripts/kconfig/conf -s,
后者生成include/config/auto.conf和include/linux/autoconf.h两个文件。
其中,include/linux/autoconf.h在gcc编译.o的过程中自动包含进去(-include include/linux/autoconf.h) 根目录下的Makefile定义了
LINUXINCLUDE := -Iinclude \
$(if $(KBUILD_SRC),-Iinclude2 -I$(srctree)/include) \
-I$(srctree)/arch/$(hdr-arch)/include \
-include include/linux/autoconf.h
它又在scripts/Makfile.lib里面,被c_flags引用
c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
$(__c_flags) $(modkern_cflags) \
-D"KBUILD_STR(s)=\#s" $(basename_flags) $(modname_flags) \
$(debug_flags)
前者又在scripts/Makefile.build里,作为cmd_cc_o_c的一部分
cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $<
综上,-include include/linux/autoconf.h被包含在每一个生成.o的cc命令里。
页:
[1]