Chinaunix

标题: .config kconfig config.in Makefile 和相应的C h S文件间的关系 [打印本页]

作者: brauceunix    时间: 2011-07-23 20:38
标题: .config kconfig config.in Makefile 和相应的C h S文件间的关系
本帖最后由 brauceunix 于 2011-07-23 22:34 编辑

写作原因:
在内核中,以make menuconfig 来讲解过程.
首先,我们会看到一个界面,上面有很多文字,这些文字呢基本上是Kconfig或者是config.in上的,而注意的同志会发现,前面有个[], 这个里面的值就是从.config读出来的。 当我们make menuconfig 保存退出的时候,就会把新的值写到.config去。。当我们make 的时候就会执行Makefile ...而Makefile 就会关联相应的.c ,h .S文件。 而不巧的有一件事,这个.config 是针对整个内核的,而不是针对具体哪个目录的,简单点来说,这个.config里的值就相当于C中的全局宏,在任意一个内核源码里都可以使用这个宏
使用内核中顶层目录的.config 文件和各级的Makefile能够迅速定位到一个选项需要的源码文件。  这样就可以更快速的研读源码了,他们的组合起到了一个真正寻路的作用

例子:

1. 内核:2.6.24.1, 在.config有如下选项:CONFIG_HPET_MMAP=y (故意找了一个完全不知道是什么意思的选项,这样具有代表性)

2. #cd linux-2.6.24.1

3. # grep CONFIG_HPET_MMAP * -r

4. 发现一条结果: drivers/char/hpet.c:#ifdef CONFIG_HPET_MMAP ,而没有在Makefile中发现这样的语句,说明它是一个选项宏,并不代表一个编译文件



。 应该会有CONFIG_HPET这个宏。。 发现果然有

5. # grep CONFIG_HPET * -r

6. 发现一条结果 drivers/char/Makefile:      obj-$(CONFIG_HPET)  += hpet.o (PS: 这里主要看Makefile的,不看其他结果)

7. #cd drivers/char

8. ls hpet.c

hpet.c

9. 结束了。



总结:

A. 相应的选项,如果是文件的话一般会有与之对应的文件名,只不过文件名是小写如:HPET, hpet.c

B. 选项多于一级的时候,通常是这个文件需要的参数,宏什么的,如:HPET_MMAP 就是hpet.c 需要的一个宏,具体神马用,我也不知道,这里只讲定位

C. 用这种方法,可以定义任意选项,即意味着,内核的所有的选项,都可以使用这样的方法去定位。感觉很Happy吧。
作者: tczf1128    时间: 2011-07-23 21:37
多谢
作者: brauceunix    时间: 2011-07-23 22:19
多谢
tczf1128 发表于 2011-07-23 21:37

不客气 哈。。。  不过写得还不完善,抽空我再完善一下
作者: haochao_1988    时间: 2011-12-28 16:47
能解释以下.config 是怎么生成都就好了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2