2. Buildroot 环境搭建:宿主机环境要求、安装依赖包、获取Buildroot源码、目录结构解析、首次配置与编译
搭建 Buildroot 环境,说白了就是给你的 Linux 开发机“配齐家伙”。
我见过不少新手,源码下载下来,一编译就报错,然后开始怀疑人生。其实大部分问题,都是宿主机环境没准备好。咱们先把这一步走稳,后面才顺。
2.1 宿主机环境要求
Buildroot 对宿主机的要求,其实不算高。但有几个硬指标,你得心里有数。
| 项目 | 最低要求 | 推荐配置 | 备注 |
|---|---|---|---|
| 操作系统 | Ubuntu 18.04 / Debian 10 | Ubuntu 22.04 LTS | 其他发行版也行,但依赖包名可能不同 |
| CPU | 双核 | 4 核及以上 | 编译内核时,多核优势明显 |
| 内存 | 4 GB | 8 GB 以上 | 编译大型文件系统时,内存不够会 swap |
| 磁盘空间 | 20 GB | 50 GB 以上 | 一次完整构建大约 10-15 GB |
| 文件系统 | ext4 | ext4 / btrfs | 不要用 NTFS 或 FAT,权限会出问题 |
2.2 安装依赖包
这一步最容易被忽略。Buildroot 的依赖包,说多不多,说少不少。少了哪个,编译到一半就卡住。
我个人习惯,在 Ubuntu/Debian 上直接跑下面这条命令,一次性装齐:
sudo apt update
sudo apt install -y \
git \
wget \
curl \
build-essential \
libncurses-dev \
flex \
bison \
gperf \
texinfo \
help2man \
unzip \
file \
libtool \
libtool-bin \
autoconf \
automake \
pkg-config \
rsync \
bc \
python3 \
python3-pip \
cpio \
lz4 \
zstd \
libssl-dev \
libelf-dev
嗯,这里要注意。如果你用的是 CentOS 或 Fedora,包名会不一样。比如 libncurses-dev 在 CentOS 上叫 ncurses-devel。我建议你直接看 Buildroot 官方文档里的 System requirements 章节,那里有各发行版的对照表。
make check-dependencies(如果 Buildroot 版本支持),它会帮你检查还有哪些缺失。
2.3 获取 Buildroot 源码
源码获取,无非两种方式:
- 下载稳定版压缩包:去
buildroot.org下载.tar.gz或.tar.xz文件。 - 克隆 Git 仓库:获取最新开发版或特定分支。
我建议你直接用 Git 克隆。为什么呢?因为方便切换版本,也方便查看提交历史。比如:
git clone https://git.buildroot.net/buildroot
cd buildroot
如果你想用某个稳定版本,比如 2024.02.x,可以这样:
git checkout 2024.02.x
我个人习惯,会在本地建一个 ~/workspace/buildroot 目录,专门放不同版本的 Buildroot。这样方便对比和回溯。
2.4 目录结构解析
拿到源码后,别急着编译。先看看它的骨架。Buildroot 的目录结构,其实很有章法。
下面这张图,是我自己整理的 Buildroot 核心目录关系:
除了上面这些,还有几个目录你也要熟悉:
- dl/:下载的源码包缓存目录。第一次编译时会自动创建,以后重编就不用再下载了。
- output/:编译输出目录。所有构建产物都在这里,包括
images/(镜像文件)、build/(编译中间文件)、target/(目标文件系统)。 - support/:Buildroot 自身的辅助脚本和工具。
- toolchain/:工具链相关的配置和补丁。
2.5 首次配置与编译
好了,环境搭好了,源码也拿到了。咱们来跑第一个例子。
我建议你从官方支持的开发板开始。比如 QEMU x86_64,这样你不需要真实硬件,就能验证整个流程。
步骤很简单:
- 选择默认配置
make qemu_x86_64_defconfig
这条命令会把 configs/qemu_x86_64_defconfig 的内容,复制到 .config 文件里。
- 自定义配置(可选)
make menuconfig
你会看到一个图形化界面。这里可以调整内核版本、文件系统类型、添加或删除软件包。第一次用,建议先不动,直接退出保存。
/ 键可以搜索配置项。比如你想找 openssh,直接搜,它会告诉你路径。这个功能我几乎天天用。
- 开始编译
make -j$(nproc)
-j$(nproc) 的意思是,用你 CPU 的所有核心并行编译。我第一次编译时,用的是 4 核的老笔记本,大概等了 20 分钟。现在用 8 核的机器,10 分钟左右就能搞定。
make source 把所有源码包下载好,再开始编译。
- 验证结果
编译完成后,在 output/images/ 目录下,你会看到:
bzImage:内核镜像rootfs.ext2:根文件系统start-qemu.sh:启动 QEMU 的脚本
直接运行 ./output/images/start-qemu.sh,就能看到你的 Buildroot 系统跑起来了。
嗯,看到登录提示符的那一刻,你会觉得前面的所有折腾,都值了。