Linux 内核可以通过输入“make menuconfig”来打开图形化配置界面,menuconfig 是一套图形化的配置工具
一、图形化界面的操作
menuconfig 图形化的配置工具需要 ncurses 库支持。ncurses 库提供了一系列的 API 函数供调用者生成基于文本的图形界面,因此在使用 menuconfig 图形化配置界面之前需要先在Ubuntu 中安装 ncurses
sudo apt-get install build-essential
sudo apt-get install libncurses5-dev
以 RK3568 为例,在内核源码目录下输入以下命令,打开图形化配置界面。
export ARCH=arm64
make rockchip_linux_defconfig
make menuconfi
二、.config 配置文件介绍
图形化配置界面配置好了以后,会得到一个.config 配置文件。在编译内核的时候会根据这个.config 文件来编译内核。
当我们使用 make menuconfig 的时候,会通过 mconf 程序去解析 Kconfig 文件,然后生成对应的配置文件.config。mconf 程序源码在内核源码 scripts/kconfig 目录下。有了.config 配置文件以后,内核就可以根据这个配置文件来编译内核,比如控制某些驱动编译进内核,或者控制某些驱动不编译内核。config 会通过 syncconfig 目标将.config 作为输入然后输出需要文件,这里我们重点更关注auto.conf 和 autoconf.h。
在 auto.conf 文件中,存放的是配置信息。
在内核源码的顶层 Makefile 中会包含 auto.conf 文件,以此引用其中的变量来控制 Makefile的动作,如哪些驱动编译,哪些驱动不编译。如:
auto.conf 文件
include include/config/auto.conf
CONFIG _A=y
顶层 Makefile 中包含 auto.conf 文
ifeq ($(dot-config),1)
include include/config/auto.conf
Endif
内核源码下 drivers/A/Makefile
obj-$(CONFIG _A) +=A.o
注:obj-y 就是编译进内核,obj-m 就是编译成 ko 文件。
在 autoconf.h 中,是 C 语言代码。用来配合编译时的条件选择。如下图所示
三、defconfig 配置文件
defconfig 文件和.config 文件都是 linux 内核的配置文件,defconfig 文件在内核源码的arch/(ARCH)/configs 目录下,是 Linux 系统默认的配置文件。比如说瑞芯微平台 Linux 源码默认的配置文件为:kernel/arch/arm64/configs/rockchip_linux_defconfig。
.config 文件位于 Linux 内核源码的顶层目录下,编译 Linux 内核时会使用.config 文件里面的配置来编译内核镜像。
如果.config 文件存在,make menuconfig 界面的默认配置也就是当前.config 文件的配置,如果修改了图形化配置界面的设置并保存,那么.config 文件会被更新。
如果.config 文件不存在,使用命令“make XXX_defconfig”命令会根据 arch/$(ARCH)/configs目录下的 XXX_defconfig 自动生成.config。make menuconfig 界面的默认配置则为 defconfig 文件中的默认配置,比如说瑞芯微平台 Linux 内核源码目录下输入“make rockchip_linux_defconfig” 会自动生成.config 文件。那么此时rockchip_linux_defconfig 的配置项和.config 的配置项是相同的。