一切尽在掌握 -- kconfig

一切尽在掌握


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更好的发挥作用,让更多的人参与这个项目,帮助更多的人,还有很长的路要走。

革命尚未成功,同志仍需努力。



你可能感兴趣的:(String,File,工具,makefile)