buildroot使用指南(一)

0x01 buildroot介绍

buildroot 是一套功能强大且易于使用的工具集,其核心由一系列 Makefile 脚本和实用程序构成,旨在简化和自动化为嵌入式系统构建完整、定制化 Linux 系统的全过程。

理解 buildroot 的关键在于其设计哲学:它是一个专注于生成完整、自包含固件镜像的工具,而非生成一个通用的 Linux 发行版(如 Debian、Ubuntu 或 Yocto Project)。这一根本性的定位决定了它的诸多特性。buildroot 的目标是创建一个静态的、可完全重现的系统镜像。这意味着,一旦配置完成,每一次构建都会产生完全相同的结果。

buildroot 的定位非常准确,它的核心优势是生成小型、快速启动且高度定制化的系统镜像,非常适合资源受限的嵌入式设备。与 Yocto Project 相比,Buildroot 的学习曲线更平缓、配置过程更简单、构建速度更快,但牺牲了部分灵活性和对复杂元数据的支持。

0x02 buildroot安装

首先buildroot运行在Linux系统上,因此Windows用户如果需要构建可以考虑虚拟机或者wsl2。前往官网下载选择最下面最新的版本,解压到本地使用。

1
2
3
4
# 下面是直接下载的shell命令逻辑
wget https://buildroot.org/downloads/buildroot-2025.08.tar.gz
tar -zxvf buildroot-*.tar.gz
mv buildroot-2025.08 buildroot

必备的构建工具安装:

1
2
sudo apt update && sudo apt upgrade -y
sudo apt install -y sed make binutils build-essential diffutils gcc g++ bash patch gzip bzip2 perl tar cpio unzip rsync file bc findutils gawk git

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

主界面窗口如下图:

buildroot-1-1

  • Target options(目标选项)

​ 关于目标的架构、二进制接口 (ABI)和浮点运算策略设置,由于我们有预配置,这里不用管。

  • Toolchain(工具链)

    工具链菜单是配置的核心部分之一,它决定了用于交叉编译目标系统所有组件(包括内核、库和应用程序)的编译器、链接器和标准库。

    1. Toolchain Type(构建链)

      可以选择使用 Buildroot 内部构建的交叉编译工具链,或者指定一个外部已经存在并安装在系统中的工具链 。这里保存默认。

    2. C Libary(C语言标准库选择)

      有三个选择,glibc(功能全面,兼容性好)、uClibc-ng(专为嵌入式系统设计的轻量级 C 库)或 musl(另一个轻量级、注重正确性和静态链接的库),这里保持默认的glibc

    3. Kernel Header Options(内核头文件)

      Buildroot 需要与特定版本的 Linux 内核头文件同步,以确保 C 库能够正确地与内核进行交互。

  • Build options(构建选项)

    配置 Buildroot 的构建过程本身,而不是配置最终目标系统的内容。这些选项主要影响构建行为、速度、日志输出和目录结构。主要开这几个部分,

    1. [*] Enable compiler cache (开启编译器缓存)

      这个能够缓存编译生成的对象文件,当下次编译相同但未修改的源文件时,它会直接从缓存中恢复结果,而不是重新调用编译器进行编译。

    2. [*] build packages with runtime debugging info (构建包提供实时调试信息)

      启用此选项后,会输出更详细的编译过程信息,有助于分析和解决复杂的编译错误。

    3. [*] 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)。

5. 保存配置文件

6. 两种清理

0x05 buildroot,让QEMU再次伟大!