3. Busybox 配置入门:make menuconfig 界面详解

说实话,我第一次打开 Busybox 的配置菜单时,也有点懵。密密麻麻的选项,跟 Linux 内核的 menuconfig 长得一模一样。但别怕,这东西用熟了,你会发现它其实很直观。

今天我们就来拆解这个界面。我会告诉你哪些选项是必选的,哪些可以砍掉,以及我踩过的那些坑。

3.1 启动配置界面

在源码目录下,执行一条命令就能进入配置界面:

$ make menuconfig

前提是你装了 ncurses-dev 库。如果没有,会报错。我建议你提前装好:

# Debian/Ubuntu
$ sudo apt-get install libncurses5-dev

# CentOS/RHEL
$ sudo yum install ncurses-devel
小技巧: 如果你在 Docker 或最小化系统里编译,记得装 make、gcc 和 ncurses-dev。缺一个都进不去菜单。

3.2 界面布局:三块核心区域

进入 menuconfig 后,你会看到这样一个界面。我把它分成三块:

make menuconfig 界面布局 顶部菜单栏:Arrow keys / Enter / Esc / ? 主配置区(选项列表) [*] 选项 — 编译进 Busybox(内置) [ ] 选项 — 不编译 <*> 选项 — 编译为模块(Busybox 无此概念) --- 选项 — 只读/依赖项 -*- 选项 — 被依赖自动选中 按 / 搜索关键字 提示 / 帮助区 选中某个选项后, 这里会显示简要说明。 按 ? 查看完整帮助。 包含:功能描述、依赖关系、 默认值、注意事项。 底部操作栏:<Select> <Exit> <Help> <Save> <Load>

说白了,这就是一个树形菜单。用方向键上下移动,回车进入子菜单,Esc 返回上层。按 ? 看帮助,按 / 搜索关键字。

3.3 选项符号:看懂这五种就够了

符号 含义 说明
[*] 编译进 Busybox 最终生成的 busybox 二进制会包含此命令
[ ] 不编译 完全排除,不会出现在镜像中
<*> 模块化 Busybox 是单体架构,此符号极少出现
--- 只读选项 由其他选项自动依赖,不可手动修改
-*- 强制选中 被依赖项自动勾选,你改不了
核心原则: 你只需要把需要的命令勾成 [*],不需要的保持 [ ]。不要全选,否则镜像会很大。

3.4 我常用的配置路径

进入菜单后,你会看到一堆分类。我挑几个重点说说:

3.4.1 Busybox Settings → General Configuration

这里是一些全局设置。我个人习惯把这几项打开:

  • Show verbose applet usage messages — 显示详细帮助信息。调试时很有用。
  • Store applet usage messages in compressed form — 压缩帮助信息,节省空间。
  • Support --install [-s] to install applet links at runtime — 支持运行时安装命令链接。我建议打开,方便后期维护。

3.4.2 Coreutils — 核心工具集

这是最常用的分类。我一般会选这些:

  • cat、chmod、chown、cp、dd、df、echo、env、ln、ls、mkdir、mv、rm、sleep、touch、uname

这些是系统启动和基本操作必备的。少一个,你的脚本可能就跑不起来。

3.4.3 Shells — 选择你的 Shell

Busybox 自带 ash 和 hush。我推荐用 ash:

  • ash — 兼容 Bash 语法,功能完整,适合大多数场景。
  • hush — 更小,但语法限制多。适合极度精简的嵌入式环境。
注意: 如果你选了 ash,记得把 Interactive shell (ash) 也勾上。否则你只能跑脚本,不能交互输入命令。

3.4.4 Linux System Utilities — 系统管理工具

这里我建议至少选这些:

  • dmesg — 查看内核日志
  • mount / umount — 挂载文件系统
  • pidof / kill / killall — 进程管理
  • reboot / poweroff — 关机重启
  • sysctl — 内核参数调整

3.5 搜索功能:快速定位命令

菜单项太多了,一个个翻很累。按 / 键,输入命令名,就能直接定位。

比如我想找 grep:

/ grep

系统会列出所有包含 grep 的选项,并显示路径。按对应的数字键就能跳转过去。

我的习惯: 先按 / 搜索,确认路径,再进去勾选。比逐层翻菜单快得多。

3.6 保存与退出

配置完成后,按 Tab 键切换到 <Exit>,回车。系统会问你是否保存:

  • 选 Yes — 保存到 .config 文件
  • 选 No — 放弃修改

保存后,.config 文件会生成在当前目录。你可以备份它:

$ cp .config my_busybox_config

下次编译时,直接加载这个配置:

$ make defconfig   # 先恢复默认
$ cp my_busybox_config .config
$ make

3.7 避坑指南

我遇到过几次翻车,分享出来给你参考:

  • 忘了选 mount — 启动后挂不了根文件系统,直接 panic。嗯,那次我折腾了一下午。
  • 没选 init — Busybox 默认的 init 程序没编译进去,内核启动后找不到 init,报 Kernel panic - not syncing: No init found。
  • 选了太多命令 — 镜像体积从 500KB 膨胀到 2MB。对于 4MB Flash 的设备来说,这就是灾难。
我的建议: 第一次先配一个最小集,能启动、能执行基本命令就行。后面再按需添加。别想着一步到位。

3.8 本章小结

make menuconfig 是 Busybox 配置的核心。你只需要记住:

  • 用方向键导航,空格键切换选中状态
  • 按 / 搜索命令
  • 只勾选你需要的,别贪多
  • 保存 .config 文件,方便复用