环境准备:在 Ubuntu 22.04 上搭建 Buildroot 开发环境

说实话,很多初学者一上来就急着编译固件,结果卡在环境配置上半天动不了。我见过太多人在群里问「为什么 make 报错」,最后发现连最基本的依赖都没装全。这一章咱们就把地基打牢,后面才能跑得快。

为什么选 Ubuntu 22.04?

Buildroot 官方 CI 长期在 Ubuntu LTS 版本上跑测试。22.04 的 GCC、Python、Perl 版本都够新,不会出现「工具链太老导致编译失败」这种恶心事。我自己在 20.04 和 22.04 上都跑过,22.04 的体验明显更顺滑。

我的建议:如果你还在用 18.04 或 20.04,趁早升级。省下来的折腾时间够你喝好几杯咖啡了。

安装必要依赖包

Buildroot 的依赖说多不多,说少不少。少了任何一个,编译到一半就崩,那才叫崩溃。我整理了一份经过实战检验的清单:

sudo apt update
sudo apt install -y \
    git \
    wget \
    curl \
    build-essential \
    libncurses5-dev \
    libncursesw5-dev \
    flex \
    bison \
    bc \
    cpio \
    rsync \
    unzip \
    file \
    python3 \
    python3-pip \
    python3-venv \
    perl \
    texinfo \
    patchelf \
    libssl-dev \
    libelf-dev \
    u-boot-tools \
    device-tree-compiler \
    lz4 \
    zstd \
    pkg-config \
    libglib2.0-dev \
    libpixman-1-dev \
    libfdt-dev \
    libgmp-dev \
    libmpc-dev \
    libmpfr-dev

嗯,这里要注意:libncurses5-dev 和 libncursesw5-dev 是 menuconfig 图形界面的依赖。少了它们,你只能看纯文本菜单,那体验……我试过一次,眼睛都快瞎了。

关键依赖速查表:
依赖包 用途 不装会怎样?
build-essential GCC、make 等基础编译工具 啥都编译不了
flex, bison 词法/语法分析器生成 Linux 内核配置阶段就挂
libncurses5-dev menuconfig 图形界面 只能用文本菜单,巨难受
bc 命令行计算器,内核构建需要 内核编译报错,莫名其妙
cpio 制作 initramfs 镜像 根文件系统打包失败
device-tree-compiler 编译设备树 .dtb 文件 ARM 平台直接凉凉
避坑指南:我曾经在 Ubuntu 20.04 上漏装了 patchelf,结果编译 Qt 5.15 时链接器疯狂报错。查了两天才发现是 patchelf 没装。所以,别偷懒,一条命令全装上最保险。

下载 Buildroot 源码

依赖装好了,接下来拿源码。Buildroot 的源码托管在 GitHub 上,我们用 git 克隆。我个人习惯用 --depth=1 只拉最新版本,省时间也省硬盘。

cd ~
mkdir -p workspace/buildroot
cd workspace/buildroot
git clone --depth=1 https://github.com/buildroot/buildroot.git
cd buildroot

克隆完成后,看看目录结构:

ls -la

你会看到一堆目录和文件。别慌,核心的就这几个:

  • Makefile — 整个 Buildroot 的入口,所有操作都通过它
  • Config.in — 顶层配置菜单,决定你要编译什么
  • package/ — 所有软件包的构建脚本,按字母排序
  • board/ — 板级支持包,存放各开发板的配置和补丁
  • configs/ — 预置的 defconfig 文件,一键配置
  • output/ — 编译产物全放这里(首次编译后生成)
小技巧:如果你网络不好,可以去 Buildroot 官网 下载 tar.gz 压缩包。但我还是推荐用 git,方便后续切版本、看提交历史。

验证环境是否就绪

源码到手了,跑个简单的检查,确保环境没问题:

make help

如果看到一长串帮助信息,说明基本环境 OK。接着试试列出支持的板子:

make list-defconfigs | head -20

你会看到类似这样的输出:

acmesystems_aria_g25_128mb_defconfig
acmesystems_aria_g25_256mb_defconfig
aarch64_efi_defconfig
aarch64_ilp32_defconfig
aarch64_ilp32_efi_defconfig
amarula_a64_relic_defconfig
amarula_vyasa_rk3288_defconfig
...

能列出 defconfig,说明 git 仓库完整,依赖也没问题。恭喜,环境搭好了。

注意:如果 make help 报错说缺少某个命令,别急着往下走。回头检查依赖列表,缺啥补啥。我曾经在刚装好的 Docker 容器里漏了 file 命令,结果 Buildroot 死活不认我的架构,折腾了半小时才发现。

知识体系总览

这一章的内容其实就三件事:装依赖、拿源码、验环境。但别小看这三步,它们是后续所有工作的基础。我画了张图,帮你理清关系:

Buildroot 开发环境准备流程 宿主机:Ubuntu 22.04 LTS GCC 11.4 / Python 3.10 / Perl 5.34 / Git 2.34 步骤一:安装系统依赖包 build-essential / flex / bison / ncurses / cpio / dtc ... 步骤二:下载 Buildroot 源码 git clone --depth=1 或 官网下载 tar.gz 步骤三:验证环境 make help → make list-defconfigs → 确认无报错

说白了,这三步就是 Buildroot 开发的「三板斧」。后面不管你是编译树莓派固件,还是给自家板子做系统,都得先过这一关。

常见问题与解决

环境搭建阶段最容易出幺蛾子。我列几个高频问题,你遇到了直接对号入座:

问题现象 原因 解决方案
make: command not found 没装 build-essential sudo apt install build-essential
flex: command not found 没装 flex sudo apt install flex
*** Unable to find the ncurses libraries. 没装 libncurses5-dev sudo apt install libncurses5-dev
fatal: unable to access 'https://github.com/...' 网络问题或代理没配 检查网络,或配置 git 代理
Can't locate File/Copy.pm in @INC Perl 模块缺失 sudo apt install perl 或补装 perl-modules
我的经验:如果你在公司内网,记得配好 git 代理:git config --global http.proxy http://proxy:port。不然克隆到一半超时,那叫一个憋屈。