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 后,你会看到这样一个界面。我把它分成三块:
说白了,这就是一个树形菜单。用方向键上下移动,回车进入子菜单,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文件,方便复用