- 论坛徽章:
- 0
|
本帖最后由 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吧。 |
|