Linux kernel中defconfig、 .config 、kconfig 与makefile的用途与关系


在Linux内核中,添加驱动代码一般有3部:

  • 将代码拷贝到Linux内核代码恰当的地方

  • 新建或者修改对应的kconfig文件

  • 新建或修改对应的makefile文件

下面先介绍这些文件的用途,然后以具体的例子加以说明,最后解释一下它们的语法。

一、作用


Kconfig ---> (每个源码目录下)提供编译选项
.config ---> (源码顶层目录下)保存选择结果
Makefile---> (每个源码目录下)根据.config中的内容来告知编译系统如何编译

 

1.deconfig 文件

一般由平台厂商提供,内核编译用做.config的参考,注意:如果,缺少该文件,无法进行编译。

文件位于:\kernel..\arch\arm\configs\xxx_defconfig

2.kconfig

分布在各目录下的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文件相关的内核配置菜单。在内核配置make menuconfig(或xconfig等)时,从Kconfig中读出配置菜单,用户配置完后保存到.config(在顶层目录下生成)中。

3.makefile

分布在各个目录下,用于集成编译。

4.config 文件

在内核编译时,主Makefile调用这个.config,用于或者用于的内核编译配置。当我们在内核源码目录下输入make menuconfig时,在出现的菜单界面中选择一项时,它会自动更新.config相应项的值。如果我们没有选择,则会在.config问下插入一行注释(# CONFIG_TOUCHSCREEN_GT9xx is not set)

文件位于 :kernel...\out\xxx_defconfig.config

二、例子


1、在driver目录下新建一个目录

mkdir driver/test 1

进入test目录,创建Kconfig文件

config TEST
    bool "Test Driver"
    help
    test hao test

2、第二步 配置Makefile

在同样的目录中,新建一个Makefile

obj-$(CONFIG_TEST) += test.o

Obj-$(CONFIG选项名) += xxx.o /*当CONFIG选项名=y时,表示对应目录下的xxx.c将被编译进内核 当CONFIG_选项名=m时对应目录下的xxx.c将被编译成模块*/

3、配置上层目录的Makefile与Kconfig

kconfig末尾添加:

source "drivers/test/Kconfig"

makefile添加:

obj-$(CONFIG_TEST) += test/

或者

obj-y += test/

到这里就加完了,还需要让它能够在编译内核时会被编译到,还需

4、使能之

有两个方法:

(1)、deconfig文件

在该文件中添加

CONFIG_TEST=y/m

(2)、Kconfig文件

修改驱动对应目录下的kconfig文件

config TEST
    bool "Test Driver"
+   default y
    help
    test hao test

 

三、语法


1、kconfig文件

CONFIG宏变量参数

  • bool: 表示该CONFIG宏只能选择y(编译内核)或者n(不编译),不能选择m(编译为模块)

  • tristate: 表示该CONFIG宏可以设置y/m/n三种模式(tristate)

  • string: 表示该CONFIG宏可以设为一串字符,比如#define CONFIG_XXX "config test"

  • hex: 表示该CONFIG宏可以设为一个十六进制,比如#define CONFIG_XXX 0x1234

  • int: 表示该CONFIG宏可以设为一个整数,比如#define CONFIG_XXX 1234

常用参数

  • default y: 表示默认是勾上的,当然也可以写为default m或者default n

  • help: 帮助提示信息

  • depends on:依赖项,比如depends on XXX 表示当前宏需要CONFIG_ XXX宏打开的前提下,才能设置它 (注意依赖项的config参数只有bool或tristate才有效)

  • select : 反依赖项,和depends on刚好相反,比如 selecton XXX表示当前宏如果是y或者m,则会自动设置XXX=y或者m(注意参数只有bool或tristate才有效)

  • choice: 会生成一个单选框,里面通过多选一方式选择config,需要注意choice中的config参数只能bool或tristate

  • prompt: 提示信息,如果对于choice而言,则会用来当做一个单选框入口点的标签

  • range : 设置用户输入的数据范围,比如range 0 100表示数据只能位于0~100

  • menuconfig: menuconfig XXX和config XXX类似,唯一不同的是该选项除了能设置y/m/n外,还可以实现菜单效果(能回车进入该项内部)

2、makefile

 

发布了42 篇原创文章 · 获赞 8 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章