4、内核配置入门:make config/menuconfig/xconfig/gconfig 四种配置工具对比
说实话,我刚接触内核配置那会儿,也被这四种工具搞晕过。都是配置内核,干嘛搞四个?后来踩了几个坑才明白——它们各有各的脾气,选对了事半功倍,选错了能把你急死。
今天我就把这四种工具掰开揉碎了讲清楚。你以后做项目,根据场景挑着用就行。
4.1 四种配置工具概览
先看一张总览表,心里有个底:
| 工具 | 命令 | 交互方式 | 依赖库 | 适用场景 |
|---|---|---|---|---|
| make config | make config |
纯文本问答 | 无 | 脚本自动化、最小系统 |
| make menuconfig | make menuconfig |
终端字符菜单 | ncurses | 嵌入式开发、SSH 远程 |
| make xconfig | make xconfig |
Qt 图形界面 | Qt 库 | 桌面开发、快速浏览 |
| make gconfig | make gconfig |
GTK+ 图形界面 | GTK+ 库 | GNOME 桌面环境 |
嗯,这张表基本把它们的家底都交代了。下面我一个一个细说。
4.2 make config:最原始的命令行问答
make config 是内核配置的「老祖宗」。你运行它之后,终端会一个接一个地弹出问题:
$ make config
*
* Linux/x86 5.10.0 Kernel Configuration
*
64-bit kernel (64BIT) [Y/n/?] y
General setup --->
每个选项你都得回答 y、n 或 m。按 ? 可以看帮助。
make config 从头配到尾,手指头都能按断。我当年第一次编译内核,傻乎乎地用了这个,按了半小时还没到一半……后来直接 Ctrl+C 跑了。
那它还有用吗? 有。我一般在两种场景用它:
- 自动化脚本:配合
yes "" | make config快速生成默认配置。 - 最小系统验证:只改几个关键选项,其他全默认。
说白了,日常开发别碰它。除非你想体验一下上世纪程序员的工作方式。
4.3 make menuconfig:嵌入式开发的主力
这是我最常用的工具,没有之一。make menuconfig 基于 ncurses 库,在终端里画出一个字符菜单界面:
$ make menuconfig
界面大概长这样(字符画示意):
┌────────────── Linux/x86 5.10.0 Kernel Configuration ──────────────┐
│ Arrow keys navigate the menu. <Enter> selects submenus --->. │
│ Highlighted letters are hotkeys. Pressing <Y> includes, <N> │
│ excludes, <M> modularizes features. Press <Esc><Esc> to exit, │
│ <?> for Help, </> for Search. Legend: [*] built-in [ ] │
│ excluded <M> module < > module capable │
└───────────────────────────────────────────────────────────────────┘
┌───────────────────────────────────────────────────────────────────┐
│ General setup ---> │
│ Enable loadable module support ---> │
│ Enable the block layer ---> │
│ Processor type and features ---> │
│ Power management and ACPI options ---> │
│ Bus options (PCI etc.) ---> │
│ Executable file formats ---> │
│ Networking support ---> │
│ Device Drivers ---> │
│ Firmware Drivers ---> │
│ File systems ---> │
│ Kernel hacking ---> │
└───────────────────────────────────────────────────────────────────┘
为什么我推荐它?
- 远程开发友好:SSH 连到开发板或服务器,照样能用。
- 搜索功能强大:按
/键可以搜配置项名字,比如搜USB,所有相关选项全列出来。 - 依赖自动处理:你选了一个选项,它依赖的其他选项会自动勾上。
? 键可以看当前选项的详细说明,包括它依赖什么、被什么依赖。我在裁剪内核时,经常靠这个来排查「为什么这个选项灰了」。
我个人习惯,只要是做嵌入式 Linux 项目,90% 的情况都用 make menuconfig。它够用,而且不挑环境。
4.4 make xconfig:图形界面的效率之选
如果你有桌面环境(比如 Ubuntu 桌面版),make xconfig 会让你眼前一亮。它基于 Qt 库,界面长这样:
$ sudo apt install qt5-default # 先装依赖
$ make xconfig
打开后,左边是树形菜单,右边是具体选项。你可以用鼠标点选、搜索、查看依赖关系,体验比 menuconfig 流畅不少。
它的优势很明显:
- 一目了然:所有配置项按树形结构展开,不用一层层进菜单。
- 批量操作:按住 Ctrl 多选,批量设为模块或内置。
- 搜索即点即用:搜到结果直接跳转,不用记路径。
不过,它有个硬伤——依赖 Qt 库。嵌入式开发板上通常没装 Qt,你只能在 PC 上配好,再把 .config 文件拷过去。
4.5 make gconfig:GTK+ 阵营的选择
make gconfig 是 GTK+ 版本,用法和 xconfig 类似:
$ sudo apt install libgtk2.0-dev # 装依赖
$ make gconfig
界面风格更贴近 GNOME 桌面。说实话,我用得不多。原因很简单:
- GTK+ 2.0 已经过时了,新系统上兼容性一般。
- 功能上和 xconfig 基本重复,没有不可替代的优势。
除非你是在老旧的 GNOME 2 环境里工作,否则我建议直接跳过它。
4.6 四种工具对比总结
为了让你更直观地对比,我画了一张图:
4.7 我的选择建议
说了这么多,到底该用哪个?我直接给结论:
日常开发:无脑选 make menuconfig
- SSH 远程、串口终端、开发板……它都能跑。
- 依赖只有 ncurses,几乎每个 Linux 发行版都自带。
- 搜索、依赖检查、帮助文档,该有的功能一个不少。
如果你在 PC 桌面环境做内核开发,而且 Qt 已经装好了,那 make xconfig 确实更爽。但别为了它专门去装一整套 Qt 库——不值得。
make gconfig 嘛……除非你是在维护老项目,否则我建议直接忽略。
至于 make config,把它当成一个「脚本工具」就好。写自动化脚本时用它,平时别碰。
make xconfig 在 PC 上快速浏览和调整配置,保存 .config 文件,然后拷到开发板上用 make menuconfig 做微调。这样既享受了图形界面的效率,又保证了远程环境的兼容性。