defconfig 与预设配置 快速生成可用 BusyBox
defconfig 是什么
defconfig 是 BusyBox 开发团队维护的一套官方推荐配置,追求"够用且不太胖"的平衡。它的设计目标是:
- 覆盖最常用的 Unix 工具集
- 体积控制在合理范围(musl 静态编译约 1.1MB)
- 适合通用嵌入式场景,不偏向特定设备
当你不确定从哪开始时,make defconfig 永远是安全的第一步。
三种预设对比
# 官方推荐默认配置(最常用的起点)
make defconfig
# 产物体积:musl ~1.1MB,glibc ~1.3MB
# 适合:绝大多数嵌入式项目
# 全部开启(最大体积)
make allyesconfig
# 产物体积:~1.9MB
# 适合:开发测试、Android 应用打包完整工具集
# 全部关闭(最小起点)
make allnoconfig
# 产物体积:~50KB(只有 init + sh 的空壳)
# 适合:极端裁剪、明确知道自己需要什么
使用预设的推荐流程
cd busybox-1.36.1
# 第一步:用 defconfig 打底
make defconfig
# 第二步:进入 menuconfig 逐步裁剪
make menuconfig
# 关掉网络工具如果不需要
# 关掉日志工具如果不需要
# 确认静态编译已开
# 第三步:编译
make -j$(nproc)
# 第四步:检查产物大小
ls -la busybox
# 预期:~1.1MB(musl)
自定义预设
如果你反复构建同类项目,可以把自己的 .config 存下来作为定制预设:
# 编译完成后保存
cp .config my-embedded.config
# 下次直接用
cp my-embedded.config .config
make oldconfig # 补齐新版本新增的配置项
make -j$(nproc)
make oldconfig 会加载已有 .config,遇到新版本新增的配置项时逐个询问(默认值直接回车接受),比重新跑 menuconfig 快得多。
randconfig 的玩法
make randconfig 会随机启用/禁用各个配置项,生成一个随机配置。这不是给生产用的,而是给 BusyBox 开发者测试各种配置组合下是否能编译通过——如果你在开发 BusyBox 本身,可以用它来做回归测试。
.config 文件内容示例
打开 defconfig 生成的 .config,前几行大概长这样:
#
# Automatically generated file; DO NOT EDIT.
# BusyBox Configuration
#
CONFIG_SYSLOGD=y
CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256
CONFIG_KLOGD=y
# CONFIG_FEATURE_KLOGD_KLOG_LOAD is not set
CONFIG_LOGGER=y
# ... 几百行
每一行的格式是 CONFIG_选项名=y(启用)、# CONFIG_选项名 is not set(禁用)、或 CONFIG_选项名=值(数值选项)。直接手改 .config 虽然可行但不推荐——依赖关系需要 menuconfig 来维护。