环境准备:在 Ubuntu 22.04 上搭建 Buildroot 开发环境
说实话,很多初学者一上来就急着编译固件,结果卡在环境配置上半天动不了。我见过太多人在群里问「为什么 make 报错」,最后发现连最基本的依赖都没装全。这一章咱们就把地基打牢,后面才能跑得快。
为什么选 Ubuntu 22.04?
Buildroot 官方 CI 长期在 Ubuntu LTS 版本上跑测试。22.04 的 GCC、Python、Perl 版本都够新,不会出现「工具链太老导致编译失败」这种恶心事。我自己在 20.04 和 22.04 上都跑过,22.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 平台直接凉凉 |
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/ — 编译产物全放这里(首次编译后生成)
验证环境是否就绪
源码到手了,跑个简单的检查,确保环境没问题:
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 开发的「三板斧」。后面不管你是编译树莓派固件,还是给自家板子做系统,都得先过这一关。
常见问题与解决
环境搭建阶段最容易出幺蛾子。我列几个高频问题,你遇到了直接对号入座:
| 问题现象 | 原因 | 解决方案 |
|---|---|---|
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 config --global http.proxy http://proxy:port。不然克隆到一半超时,那叫一个憋屈。