2. 环境搭建:Ubuntu环境准备、安装依赖包、下载Buildroot源码、首次配置与编译

好,咱们正式开始动手。这一章说白了就是搭台子,台子搭稳了,后面唱戏才不慌。我见过不少新手,一上来就急着配内核、改驱动,结果编译环境没弄好,卡在莫名其妙的报错上,一查就是缺个包或者版本不对。嗯,咱们别走那个弯路。

2.1 为什么选 Ubuntu?

Buildroot 官方推荐的就是 Ubuntu/Debian 系。我个人习惯用 Ubuntu 22.04 LTS,原因很简单:包源新、社区活跃、遇到问题随便一搜就有答案。你非要用 CentOS 或者 Arch 也不是不行,但依赖包的名字和版本会让你多花不少时间。我建议你直接装一个 Ubuntu 22.04 的虚拟机或者 WSL2,干净利落。

我的建议: 如果你在 Windows 上开发,用 WSL2 装 Ubuntu 22.04 是最省事的。别折腾双系统,除非你打算把整个工作流都迁到 Linux 上。

2.2 安装依赖包

Buildroot 的编译依赖说多不多,说少不少。少了哪个,编译到一半就停,很烦。我整理了一个清单,你直接复制粘贴跑一遍就行。

sudo apt update
sudo apt install -y \
    git \
    wget \
    curl \
    build-essential \
    libncurses-dev \
    flex \
    bison \
    gperf \
    python3 \
    python3-pip \
    python3-venv \
    rsync \
    unzip \
    file \
    cpio \
    bc \
    libssl-dev \
    libelf-dev \
    u-boot-tools \
    device-tree-compiler \
    kmod \
    swig \
    libtool \
    autoconf \
    automake \
    pkg-config \
    cmake \
    ninja-build \
    ccache

这里面有几个我特别想提一下:

  • libncurses-dev:没有它,make menuconfig 那个图形界面就出不来。
  • flex、bison:编译内核和 U-Boot 的时候要用,缺了会报语法错误。
  • ccache:这个我强烈建议装上。我做过一个项目,每次全量编译要 40 分钟,开了 ccache 之后,第二次编译直接缩到 10 分钟。你想想看,省下来的时间够喝几杯咖啡了。
注意: 如果你用的是 Ubuntu 20.04,python3 默认版本是 3.8,问题不大。但如果是 18.04,建议先升级到 20.04 或 22.04,否则后面有些包会报版本不兼容。

2.3 下载 Buildroot 源码

依赖装完了,接下来拿源码。我个人习惯用 长期支持版(LTS),稳定、坑少。你可以去 Buildroot 官网 看最新 LTS 版本。写这个课程的时候,最新的 LTS 是 2024.02.x。

下载方式有两种:

  1. 直接下载压缩包:简单,但不好管理版本。
  2. 用 Git 克隆:我推荐这个。方便切分支、打补丁、回退。
# 方法一:下载压缩包
wget https://buildroot.org/downloads/buildroot-2024.02.tar.gz
tar -xzf buildroot-2024.02.tar.gz
cd buildroot-2024.02

# 方法二:Git 克隆(推荐)
git clone https://git.buildroot.net/buildroot
cd buildroot
git checkout 2024.02

我个人习惯用 Git 方式。为什么?因为我在项目中经常需要同时维护几个不同版本的 Buildroot,用 Git 分支管理起来特别方便。你想想看,一个分支是产品稳定版,一个分支是实验新功能,切来切去,比解压好几个文件夹清爽多了。

2.4 首次配置与编译

源码拿到了,别急着直接 make。Buildroot 的配置逻辑是这样的:

  • 它内置了很多 默认配置(defconfig),针对不同的开发板。
  • 你选一个接近你板子的配置,然后微调。
  • 最后保存成你自己的配置。

先看看有哪些现成的配置:

ls configs/ | grep -i "raspberry\|stm32\|imx\|qemu"

比如你手头是树莓派 4,那就用 raspberrypi4_defconfig。如果是 QEMU 模拟器,用 qemu_x86_64_defconfig。我刚开始学的时候,就是拿 QEMU 练手的,不用硬件也能跑,特别适合调试。

# 以 QEMU x86_64 为例
make qemu_x86_64_defconfig

这一步会生成一个 .config 文件。你可以用 make menuconfig 进去看看,调整一些选项,比如:

  • Target options → Target Architecture Variant(选你的 CPU 型号)
  • Toolchain → Enable C++ support(如果你要跑 C++ 程序)
  • System configuration → Root password(设个密码,别用默认空密码)
避坑指南: 我第一次用 menuconfig 的时候,改完直接退出,没保存。结果编译出来还是默认配置。记住:退出时选 Yes 保存,别手快按了 No。

配置好了,开始编译:

make -j$(nproc)

-j$(nproc) 的意思是让 CPU 全部核心一起干活。我第一次编译 QEMU x86_64 的默认配置,大概用了 15 分钟。如果是树莓派这种带内核和 U-Boot 的,可能要 30-40 分钟。这时候你可以去泡杯茶,或者看看文档。

编译完成后,在 output/images/ 目录下会生成:

文件 说明
rootfs.cpio 根文件系统(initramfs 格式)
rootfs.ext2 根文件系统(ext2 格式,适合 QEMU)
bzImage Linux 内核镜像
start-qemu.sh 自动生成的 QEMU 启动脚本

直接运行 ./output/images/start-qemu.sh,就能看到系统启动了。登录进去,用户名 root,密码是你之前设的(如果没改,默认空密码)。

我的经验: 第一次编译成功后,建议把 output/ 目录备份一下。后面你改配置、加包,万一搞坏了,直接恢复备份,不用从头再编。我吃过这个亏,改了一个选项导致编译失败,又不想回退,最后只能删了 output 重来。备份一下,省心。

2.5 本章知识体系

下面这张图帮你理清这一章的核心流程:

Buildroot 环境搭建与首次编译流程 Buildroot 环境搭建与首次编译流程 Ubuntu 22.04 LTS 安装编译依赖包 下载 Buildroot 源码 wget + tar 解压 git clone + checkout make defconfig + menuconfig make -j$(nproc) 关键输出文件 • bzImage (内核) • rootfs.cpio • rootfs.ext2 • start-qemu.sh

这张图把整个流程串起来了:从 Ubuntu 环境开始,装依赖、下源码、选配置、编译,最后拿到镜像文件。每一步都有对应的输出,环环相扣。你照着这个顺序走,基本不会出大问题。

2.6 常见问题与解决

编译过程中可能会遇到一些报错,我挑几个常见的说一下:

报错信息 原因 解决方法
/bin/sh: 1: bison: not found 缺少 bison sudo apt install bison
fatal error: curses.h: No such file or directory 缺少 ncurses 开发库 sudo apt install libncurses-dev
Your display is too small to run Menuconfig! 终端窗口太小 把终端窗口拉大,或者用 make nconfig 替代
Can't find libssl.pc 缺少 OpenSSL 开发库 sudo apt install libssl-dev
特别提醒: 如果你在 WSL2 上编译,默认的 /tmp 目录可能很小(只有 1GB 左右),编译大项目时会报磁盘空间不足。解决办法:把 BR2_HOST_DIR 和 BR2_DL_DIR 指向一个有足够空间的分区,或者在 WSL2 配置里把 /tmp 挂载到 Windows 的临时目录。

好了,环境搭好了,第一次编译也跑通了。你现在手里应该有一个能启动的 Buildroot 系统。后面的事情就好办了——加包、改配置、集成驱动,都是在这个基础上做文章。记住这个流程,后面每一章都会用到它。