Buildroot 的 make menuconfig包含的配置项

关键词:Buildroot、嵌入式 Linux、menuconfig、交叉编译、根文件系统


一、为什么要写这篇博客?
每次用 make menuconfig 打开 Buildroot,左侧 10 个大菜单、成百上千个子选项,新人总有种“无从下手”的窒息感。


二、速览

Buildroot 配置总览
├─ 1️⃣ Target options(目标硬件)
├─ 2️⃣ Build options(构建行为)
├─ 3️⃣ Toolchain(交叉工具链)
├─ 4️⃣ System configuration(系统级设置)
├─ 5️⃣ Kernel(Linux 内核)
├─ 6️⃣ Target packages(用户空间软件包)
│   ├─ 基础工具
│   ├─ 解释器/语言
│   ├─ 网络工具
│   ├─ 图形与 UI
│   ├─ 音频/多媒体
│   ├─ 数据库
│   ├─ 文件系统
│   ├─ 开发/调试
│   └─ 自定义软件包
├─ 7️⃣ Filesystem images(根文件系统镜像格式)
├─ 8️⃣ Bootloaders(引导加载器)
├─ 9️⃣ Host utilities(宿主机工具)
└─ 🔟 Legacy config options(旧兼容项)

三、菜单逐条详解_10个

每个条目后括号内给出常见值或建议,可直接抄作业。

1️⃣ Target options(目标硬件)

选项 典型值 / 说明
Target Architecture ARM (little endian)
Target Variant cortex-A7
Target ABI EABIhf (hard-float)
Floating point strategy NEON/VFPv4
Toolchain header file 5.x kernel headers

小坑:大小端选错会导致内核启动直接挂。


2️⃣ Build options(构建行为)

选项 建议
Download dir (TOPDIR)/dl
Number of parallel jobs CPU 核数×1.5
Enable compiler cache (ccache) ✅ 首次编译后第二次提速 50%
strip target binaries ✅ 减小体积
libraries (shared only / static) 嵌入式优先 shared


3️⃣ Toolchain(交叉工具链)

选项 建议
Toolchain type Buildroot toolchain
GCC version 13.x
C library musl (体积最小) / glibc (最兼容)
C++ support ✅ Qt 工程必须开
Thread library NPTL

如果公司已有 Linaro 工具链,选 External toolchain 并填路径。


4️⃣ System configuration(系统级设置)

选项 示例
System hostname myboard
System banner Welcome to MyBoard!
Root password 123456
Init system BusyBox (最小) / systemd (需要 glibc)
getty port ttyS0
Baudrate 115200
Overlay directories board/myboard/rootfs-overlay
Post-build scripts board/myboard/post-build.sh


5️⃣ Kernel(Linux 内核)

选项 说明
Kernel version Custom Git repository / 6.6.x
Kernel configuration Use a custom config file
Device tree source board/myboard/myboard.dts
Kernel binary format zImage (ARM64 用 Image.gz)
Install kernel image to /boot ✅


6️⃣ Target packages(用户空间软件包)

80% 的体积在这里,按需裁剪。

子菜单 必开项 可选项
基础工具 BusyBox coreutils, util-linux
解释器 Python3 (pip, ssl) Lua, Node.js
网络 dropbear (轻量 ssh) openssh, wpa_supplicant
图形 Qt5 (widgets, gui) SDL2, GTK3
音频 alsa-utils gstreamer1, mpd
调试 gdb, strace valgrind, perf
自定义 见下文

如何添加自己的软件包?

  1. package/ 新建 myapp/
  2. 新建 Config.in + myapp.mk
  3. package/Config.insource "package/myapp/Config.in"
  4. 重新 make menuconfig 就能在 Target packages 里看到。

7️⃣ Filesystem images(根文件系统镜像格式)

格式 场景
ext4 SD 卡、U 盘
squashfs 只读 rootfs,OTA 升级
ubifs NAND/NOR
initramfs RAM 启动,救援系统
tar.gz 主机 docker 镜像


8️⃣ Bootloaders(引导加载器)

Bootloader 典型配置
U-Boot 选 defconfig: myboard_defconfig
Barebox 适用于 NXP
GRUB2 x86_64


9️⃣ Host utilities(宿主机工具)

工具 用途
genimage 生成单文件 SD 卡镜像
mkenvimage 生成 U-Boot 环境变量镜像
swupdate 做 OTA 升级包


🔟 Legacy config options

除非编译老项目,否则不用动。


四、5 步口诀,30 秒回忆

硬件 5 步:架构 → 子型 → 浮点 → 大小端 → MMU  
软件 6 步:工具链 → 系统 → 内核 → 软件包 → 格式 → 引导  

五、实战:一条命令跑通

# 1. 拿到官方最小配置
make qemu_arm_vexpress_defconfig

# 2. 打开 menuconfig 按需裁剪
make menuconfig

# 3. 编译
make -j$(nproc)

# 4. 启动 QEMU 验证
qemu-system-arm -M vexpress-a9 \
  -kernel output/images/zImage \
  -dtb output/images/vexpress-v2p-ca9.dtb \
  -drive file=output/images/rootfs.ext2,if=sd,format=raw \
  -append "root=/dev/mmcblk0 console=ttyAMA0" \
  -serial stdio

六、开发总结

  • 首先60% 时间花在 Target packages 里砍包。
  • 其次30% 问题出在 Device Tree 或 Kernel config。
  • 最后 10% 才需要改 Build options。
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐