分享

Kconfig 和 Makefile

 ____足迹____ 2013-04-15


        首先我们来学习什么Makefile,什么是Kconfig ,什么是.config 


        Makefile:一个文本形式的文件,其中包含一些规则告诉make编译哪些文件以及怎样编译这些文件。

         Kconfig:一个文本形式的文件,其中主要作用是在内核配置时候,作为配置选项。

        .config:文件是在进行内核配置的时候,经过配置后生成的内核编译参考文件。


其中第一行obj-y  中的y表示编译进内核,而obj-$(CONFIG_LEGACY_PTYS)  中CONFIG_LEGACY_PTYS则表示一个变量,类似于我们C语言中的变量,用$( )来表示,它一般可以取三种值y ,m ,n.y表示

编译进内核,而m则表示以模块的方式进行编译,n表示不编译进内核。obj-y    += 等号后面的.o后缀文件则是由该目录下的对应名称的.c文件编译而来。

而上面CONFIG_LEGACY_PTYS变量的取值则是通过.config文件来集

中赋值的。


        总的来说,三者之间的关系如下:当我们在内核源码目录下输入makemenuconfig时,在出现的菜单界面中选择一项时,它会自动跟新.config相应项的值。如果我们没有选择,则会在.config问下插入一行注释。类似于# CONFIG_SERIAL_NONSTANDARD is not set,我们输入make时,根据makefile文件来编译,makefile文件中的变量值则由.config来进行赋值操作。仅仅只在kconfig中添加选项,只会在菜单界面中显示,即使此时选择y或m,也不会编译文件。还需要在makefile文件中按照规定添加相应行才能进行编译。简单图解如下:           

kconfig------->.config---------->makefile



1. Kconfig 结构 

每种平台对应的目录下面都有一个 Kconfig 文件,比如 arch/i386/Kconfig,该文

件通过 source 语句构建出一个 Kconfig 树。文件 arch/i386/Kconfig 的内容片段如下: 

mainmenu "Linux Kernel Configuration"  

   config X86_32 

bool 

default y 

help 

This is Linux's home port.  Linux was originally native to the Intel 

386, and runs on all the later x86 processors including the Intel 

486, 586, Pentiums, and various instruction-set-compatible chips 

AMD, Cyrix, and others. 

…… 

source "init/Kconfig" 

menu "Processor type and features" 

source "kernel/time/Kconfig" 

…… 

config KTIME_SCALAR 

bool 

default y 

Kconfig               Documentation/kbuild/kconfig-language.txt下面对其简单介绍。 

1)菜单项。 

config 关键字可以定义一个新的菜单项,比如: 

config MODVERSIONS 

bool "Set version information on all module symbols" 

depends on MODULES 

help 

Usually, modules have to be recompiled whenever you switch to a 

new 

kernel.  ... 

后面的几行定义了该菜单项的属性,包括类型、依赖关系、选择提示、帮助信息

和缺省值等。 

类型包括 booltristatestringhex  intbool 类型的只能选中或不选中,tristate类型的菜单项多了编译成内核模块的选项。

2)菜单组织结构。 

菜单选项通过两种方式组成树状结构。 

使用关键字“menu”显式声明为菜单,比如: 

menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)" 

config PCI 

…… 

endmenu 

通过依赖关系确定菜单结构,比如: 

config MODULES 

bool "Enable loadable module support" 

config MODVERSIONS 

bool "Set version information on all module symbols" 

depends on MODULES 

comment "module support disabled" 

depends on !MODULES 

MODVERSIONS 菜单项依赖于 MODULES,所以它就是一个子菜单项。这要求

菜单项和它的子菜单项同步显示或不显示。 

3Kconfig 关键字。 

Kconfig 文件描述了一系列的菜单选项,除帮助信息外,文件中的每一行都以一

个关键字开始,主要有 configmenuconfigchoice/endchoicecommentsmenu/endmenu

if/endifsource 等,它们都可以用于结束一个菜单项,只有前 5 个可以用在菜单项定

义的开始。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多