总结:
- Menuconfig是编辑内核的工具。
- Kconfig定义Menuconfig菜单选项。
- .config是最后Menuconfig配置完生成的文件。
- Makefile根据.config宏定义判断是否编译驱动。
一、Menuconfig的操作
1、Linux编译器通过.config文件确认哪些代码编译进内核,哪些被裁减掉,menuconfig是生成.config的一个工具。
在Linux发展过程中,配置内核可以使用一下命令:
– #make config(基于文本的最为传统的配置界面,不推荐使用)
– #make menuconfig(基于文本菜单的配置界面)
– #make xconfig(要求QT被安装)
– #make gconfig(要求GTK+被安装)
2、在Linux源码目录下输入命令make Menuconfig,可以进入配置界面
– menuconfig实现的代码在源码“scripts”目录下(了解即可)
3、搜索
– 界面输入“/”,输入查找关键词,输入“回车”即可搜索
4、使用 “ 空格 ”键 选择具体驱动配置,有 三种状态
– “M”编译成模块(需要在编译文件里面特殊定义,后面介绍)
– “空”不编译状态
– “*”编译进内核
二、Kconfig文件
1、Kconfig简介
当执行#make menuconfig时会出现内核的配置界面,所有配置工具都是通过读取"arch/$(ARCH)Kconfig"文件来生成配置界面,这个文件就是所有配置的总入口,它会包含其他目录的Kconfig
Kconfig的作用:Kconfig用来配置内核,它就是各种配置界面的源文件,内核的配置工具读取各个Kconfig文件,生成配置界面供开发人员配置内核,最后生成配置文件.config
linux源码目录下的Kconfig也是通过脚本编写而成,所以学会“仿写”即可。Kconfig文件在每一级目录下都有,源码下的如下图所示。
2、Linux内核配置裁减
打开:drivers/char/Kconfig,在LEDS_CTL上面仿写一个HELLO_CTL。
然后查看menuconfig配置和裁减HELLO的驱动,查看.config文件的变化,将HELLO定义为“tristate”,可选为“M”状态。
三、.config
menuconfig配置完后,会生成.config,在linux内核源码根目录。打开如下:
里面实际上就是很多根据刚刚配置生成的宏定义开关。用于开关驱动。这些宏定义开关在对应的驱动目录下的Makefile文件中,起到了开关作用。如下面LED驱动的Makefile,就是根据这个.config里面的宏定义,来判断是否将itop4412_leds编译进内核里。