buildroot使用指南(一)
0x01 buildroot介绍
buildroot 是一套功能强大且易于使用的工具集,其核心由一系列 Makefile 脚本和实用程序构成,旨在简化和自动化为嵌入式系统构建完整、定制化 Linux 系统的全过程。
理解 buildroot 的关键在于其设计哲学:它是一个专注于生成完整、自包含固件镜像的工具,而非生成一个通用的 Linux 发行版(如 Debian、Ubuntu 或 Yocto Project)。这一根本性的定位决定了它的诸多特性。buildroot 的目标是创建一个静态的、可完全重现的系统镜像。这意味着,一旦配置完成,每一次构建都会产生完全相同的结果。
buildroot 的定位非常准确,它的核心优势是生成小型、快速启动且高度定制化的系统镜像,非常适合资源受限的嵌入式设备。与 Yocto Project 相比,Buildroot 的学习曲线更平缓、配置过程更简单、构建速度更快,但牺牲了部分灵活性和对复杂元数据的支持。
0x02 buildroot安装
首先buildroot运行在Linux系统上,因此Windows用户如果需要构建可以考虑虚拟机或者wsl2。前往官网下载选择最下面最新的版本,解压到本地使用。
1 | # 下面是直接下载的shell命令逻辑 |
必备的构建工具安装:
1 | sudo apt update && sudo apt upgrade -y |
note
这里使用的版本是2025.08,Buildroot的版本更新周期为每三个月一次,通常在2月、5月、8月和11月发布新版本,版本号格式为YYYY.MM。每次更新可能会提供一些新的package、修复一些BUG。
0x03 buildroot make命令
buildroot是基于make来进行配置工作和构建的。
首先是最重要的命令 —— 帮助指令
1 | make help # 获取make命令的提示 |
下面是一些基本常用的make指令,一般会用到
| make命令 | 含义 | 用途 |
|---|---|---|
| make | 启动完整的构建过程 | 构建系统镜像文件 |
| make -j8 | 以8个进程来进行并发编译 | 加速构建系统镜像文件 |
| make clean | 清除所有编译产物 | 清理,重新构建 |
| make distclean | 清除所有构建产物、下载的源码、配置等 | 清理,便于下次构建 |
make <board>-defconfig |
加载一个预设的配置文件 | 导入配置,方便构建或修改 |
| make menuconfig make nconfig make xconfig make gconfig |
图形化进行配置(每个配置界面的依赖不同) | 进行配置,可以在其中保存导出配置文件 |
| make saveconfig | 保存当前的配置 | 成功构建后保存配置,便于复用和重现 |
| make source | 下载构建所需要的源码 | 离线构建,避免构建过程中网络问题中断 |
note
上面的配置界面中,需要安装对应的库,具体来说:
- menuconfig 基于curses库, 所有配置界面中兼容性最好,且配置选项最直观
- nconfig 基于ncurses库, 这个和上面的在基本的linux发行版中都是自带的,我更喜欢用这个
- xconfig 基于Qt库
-
gconfig 基于GTK库
0x04 buildroot构建配置
我们下面来简单构建mip64le的qemu系统文件作为构建示例
1. 预配置选择
首先进入buildroot根目录,然后可以进行预配置文件导入
1 | make qemu_mips64el_malta_defconfig |
info
对于预配置文件,可以在buildroot/configs下进行查找,例如我需要找mips64le供qemu使用,那么我会查下面的指令:
ls configs | grep ’qemu_mips.*_defconfig’
2. 自定义配置修改
1 | make nconfig |
主界面窗口如下图:

- Target options(目标选项)
关于目标的架构、二进制接口 (ABI)和浮点运算策略设置,由于我们有预配置,这里不用管。
Toolchain(工具链)
工具链菜单是配置的核心部分之一,它决定了用于交叉编译目标系统所有组件(包括内核、库和应用程序)的编译器、链接器和标准库。
Toolchain Type(构建链)
可以选择使用 Buildroot 内部构建的交叉编译工具链,或者指定一个外部已经存在并安装在系统中的工具链 。这里保存默认。
C Libary(C语言标准库选择)
有三个选择,
glibc(功能全面,兼容性好)、uClibc-ng(专为嵌入式系统设计的轻量级 C 库)或musl(另一个轻量级、注重正确性和静态链接的库),这里保持默认的glibc。Kernel Header Options(内核头文件)
Buildroot 需要与特定版本的 Linux 内核头文件同步,以确保 C 库能够正确地与内核进行交互。
Build options(构建选项)
配置 Buildroot 的构建过程本身,而不是配置最终目标系统的内容。这些选项主要影响构建行为、速度、日志输出和目录结构。主要开这几个部分,
[*] Enable compiler cache (开启编译器缓存)
这个能够缓存编译生成的对象文件,当下次编译相同但未修改的源文件时,它会直接从缓存中恢复结果,而不是重新调用编译器进行编译。
[*] build packages with runtime debugging info (构建包提供实时调试信息)
启用此选项后,会输出更详细的编译过程信息,有助于分析和解决复杂的编译错误。
[*] strip target binaries (修剪二进制文件)
编译生成的可执行文件和动态库中通常包含调试符号。这些符号对于调试非常有用,但在最终部署的固件中会占用大量空间。Strip 操作会移除这些符号,从而显著减小二进制文件的大小。
System configuration(系统配置)
系统信息的基本配置,可自行选择,例如主机名,登陆欢迎,密码,密码的加密方式等等。
Kernel(系统内核)
Target packages(目标安装包)
Filesystem images(文件系统镜像)
Bootloaders
Host utilities
Legacy config options
3. 预先下载源码(可选,推荐)
1 | make source |
4. 构建
1 | make -j$(nproc) |
构建需要花费非常长的时间,耐心等待(玩会手机 doge)。