lzjz80 发表于 2016-05-25 16:29

内核中的一些宏定义找不到

我用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这些宏是那里定义呢?
内核中还有很多类似这样的宏定义,请问都是在那定义呢?

Godbach 发表于 2016-05-25 19:20

回复 1# lzjz80
编译内核的时候,需要先生成配置文件。这些定义都在内核配置文件里。




   

lzjz80 发表于 2016-05-25 19:55

OK,明白了,谢谢了。{:1_1:}

Godbach 发表于 2016-05-25 20:30

回复 3# lzjz80

{:qq11:}


   

nswcfd 发表于 2016-05-27 11:02

在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)

nswcfd 发表于 2016-05-27 11:10

根目录下的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]
查看完整版本: 内核中的一些宏定义找不到