一切尽在掌握
kconfig是个强大的工具,如果说makefile制定了完美的编译依赖关系,那么kconfig制定了完美的模块的依赖关系。
源头
在根目录下有个Kconfig文件,这就是一切故事的起源。
整个文件就没几行,打出来看一眼。
#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/kconfig-language.txt.
#
mainmenu "Linux/$ARCH $KERNELVERSION Kernel Configuration"
config SRCARCH
string
option env="SRCARCH"
source "arch/$SRCARCH/Kconfig"
第一行就是输出个内核版本号。
第二行应该是配置一个环境变量? 不知道,以后再来看。
第三行很重要,这个是包含了一个arch目录下的Kconfig文件。
当你打开这个文件的时候,你就发现这是一切的开始。
我们运行make menuconfig, 你可以看到,这个文件就是make menuconfig中显示的东西。
一切都变得明朗起来,你是否有种太极生两仪,两仪生四象,四象生八卦的神奇感觉
剪不断,理还乱
kernel中这么多的模块之间的依赖关系,简直就是 剪不断,理还乱。
幸好在Kconfig文件中,我们可以找到一点蛛丝马迹。
依赖 depends on
这个关键字表示了在某些配置选中后,本配置项才会显示。
在 driver/pci/Kconfig文件中有,
config PCI_MSI
bool "Message Signaled Interrupts (MSI and MSI-X)"
depends on PCI
depends on ARCH_SUPPORTS_MSI
可以发现,要配置MSI必须要先支持PCI。 恩这个道理咱都懂, 连PCI都没有,哪里来的MSI啊。
反向依赖 select
这个关键字表示了当本配置项选中后,其他的配置项也需要选中。
在 arch/x86/Kconfig文件中有:
config HIGHMEM64G
bool "64GB"
depends on !M386 && !M486
select X86_PAE
---help---
Select this if you have a 32-bit processor and more than 4
gigabytes of physical RAM.
其实这个我也不懂,看上去就是说要支持更多的物理内存,那么在x86的平台上,就要选中X86_PAE。
看上去是这么回事儿。
革命尚未成功,同志仍需努力
好了,我要记录的东西就到这里了。突然这么嘎然而止,估计大家一定意犹未尽。
但是事实就是这样,基本的kconfig语法大家可以在 Document/kbuild/kconfig-language.txt中找到。
就不用我在这里搬出来照抄了。
kernel模块之间的关联又怎能是我这样的初学者所能理解,不能理解又岂能讲得清楚。
这里只是给大家一个入口,让大家能够进一步的在kernel的海洋中探索。话说,授之以鱼不如授之以渔嘛。
要让linux kernel更好的发挥作用,让更多的人参与这个项目,帮助更多的人,还有很长的路要走。
革命尚未成功,同志仍需努力。