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 文件拷过去。

踩坑提醒: 我曾经在 Ubuntu 20.04 上装 Qt5 折腾了半小时,结果发现内核源码里的 xconfig 对新版 Qt 支持不太好,界面渲染有问题。后来我干脆用 menuconfig 了。所以,如果你不是重度桌面用户,menuconfig 更稳。

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 四种工具对比总结

为了让你更直观地对比,我画了一张图:

内核配置工具对比 make config 纯文本问答 make menuconfig 终端字符菜单 make xconfig Qt 图形界面 make gconfig GTK+ 图形界面 交互方式 逐条问答 字符菜单 图形界面 图形界面 依赖库 无 ncurses Qt GTK+ 适用场景 脚本自动化 嵌入式开发 桌面开发 GNOME 环境 推荐指数 ★★☆☆☆ ★★★★★ ★★★☆☆ ★★☆☆☆ 我的建议 日常开发:make menuconfig(稳定、通用、远程友好) 桌面环境:make xconfig(效率高、可视化好) 自动化脚本:make config(轻量、无依赖)

4.7 我的选择建议

说了这么多,到底该用哪个?我直接给结论:

日常开发:无脑选 make menuconfig

  • SSH 远程、串口终端、开发板……它都能跑。
  • 依赖只有 ncurses,几乎每个 Linux 发行版都自带。
  • 搜索、依赖检查、帮助文档,该有的功能一个不少。

如果你在 PC 桌面环境做内核开发,而且 Qt 已经装好了,那 make xconfig 确实更爽。但别为了它专门去装一整套 Qt 库——不值得。

make gconfig 嘛……除非你是在维护老项目,否则我建议直接忽略。

至于 make config,把它当成一个「脚本工具」就好。写自动化脚本时用它,平时别碰。

一个实用技巧: 我经常这样组合使用——先用 make xconfig 在 PC 上快速浏览和调整配置,保存 .config 文件,然后拷到开发板上用 make menuconfig 做微调。这样既享受了图形界面的效率,又保证了远程环境的兼容性。