2、环境搭建:安装依赖包、下载Buildroot源码、首次编译体验
好,咱们正式开始动手。这一章说白了就是「把家伙事儿备齐」。我见过不少新手,一上来就急着编译,结果卡在某个依赖报错上,折腾半天。其实环境搭好了,后面就顺了。
2.1 安装依赖包
Buildroot 对宿主机的依赖不算多,但缺一个就编不过。我个人习惯用 Ubuntu 20.04/22.04 LTS,Debian 系也完全没问题。如果你用 CentOS 或 Arch,包名稍微改改就行。
先更新一下软件源:
sudo apt update
sudo apt upgrade -y
然后安装核心依赖:
sudo apt install -y \
build-essential \
git \
wget \
cpio \
unzip \
rsync \
bc \
file \
libncurses-dev \
libssl-dev \
flex \
bison \
python3 \
python3-pip \
python3-venv
这里我重点提一下 libncurses-dev。它负责提供 make menuconfig 的图形界面。如果你没装,配置界面就起不来。还有 flex 和 bison,它们是词法分析和语法分析工具,Buildroot 内部有些脚本依赖它们。
2.2 下载Buildroot源码
Buildroot 的源码托管在 GitHub 上。我个人建议不要直接下载最新的 master 分支,而是选一个稳定的 LTS 版本。比如 2024.02.x 或 2024.11.x。为什么?因为 master 可能正在开发中,有些配置选项会变,你照着教程做可能对不上。
下载方式有两种:
方式一:git clone(推荐)
git clone https://github.com/buildroot/buildroot.git
cd buildroot
git checkout 2024.02.1
这样你随时可以切分支,也方便后续打补丁。
方式二:直接下载 tarball
wget https://buildroot.org/downloads/buildroot-2024.02.1.tar.gz
tar -xzf buildroot-2024.02.1.tar.gz
cd buildroot-2024.02.1
我个人更推荐 git 方式。因为你在开发过程中,可能需要查看某个 commit 的改动,或者回退到某个版本。tarball 虽然简单,但少了版本管理的灵活性。
~/workspace/ 下,再也没出过问题。
2.3 首次编译体验
好,现在源码有了,依赖也装好了。咱们来跑第一次编译。别紧张,这次只是验证环境是否正常,选一个最简单的配置——QEMU ARM 虚拟平台。
先加载默认配置:
make qemu_arm_versatile_defconfig
这条命令会生成一个 .config 文件。你可以用 make menuconfig 看看里面都有啥。不过第一次先别改,直接编译:
make
然后就是漫长的等待。第一次编译要下载所有源码包,还要交叉编译工具链、内核、根文件系统。具体时间取决于你的网速和 CPU。我自己的机器(i7-12700,32GB 内存)大概需要 15-20 分钟。
编译过程中,你会看到类似这样的输出:
>>> host-tar Installing to host directory
>>> host-gzip Installing to host directory
>>> host-lz4 Installing to host directory
...
>>> linux Building
>>> linux Installing to target
>>> busybox Building
...
如果一切顺利,最后你会看到:
>>> Generating root filesystem image
...
>>> Done
编译完成后,生成的镜像文件在 output/images/ 目录下:
| 文件 | 说明 |
|---|---|
rootfs.cpio |
根文件系统镜像(cpio 格式) |
zImage |
Linux 内核镜像 |
versatile-pb.dtb |
设备树文件 |
你可以用 QEMU 启动它验证一下:
qemu-system-arm -M versatilepb \
-kernel output/images/zImage \
-dtb output/images/versatile-pb.dtb \
-initrd output/images/rootfs.cpio \
-append "console=ttyAMA0" \
-nographic
如果看到登录提示符,说明环境搭建成功了!
2.4 常见问题与避坑
编译过程中可能会遇到一些问题。我把自己踩过的坑列出来,你遇到了可以直接对照:
- 下载超时或失败:Buildroot 会从官方源下载源码包。如果你在墙内,有些包可能下不动。解决方案是配置国内镜像源,或者用
BR2_PRIMARY_SITE指定备用下载地址。 - 缺少
python3-venv:有些新版本的 Buildroot 会用到 Python 虚拟环境。如果你没装,编译到一半会报错。直接sudo apt install python3-venv解决。 - 磁盘空间不足:Buildroot 编译过程中会下载大量源码包,并生成中间文件。建议至少预留 10GB 空间。我习惯把
output/目录放到单独的 SSD 分区上,速度更快。 - 权限问题:不要用 root 用户编译。Buildroot 官方明确说不建议用 root。如果你不小心用了,可能会污染宿主机的
/usr目录。用普通用户就好。
make 会继续,但有些包可能下载到一半,需要手动清理 dl/ 目录下的临时文件。我习惯用 make clean 重新来过,虽然慢点,但干净。
嗯,到这里环境就搭好了。下一章咱们开始真正定制根文件系统——去掉那些用不上的包,把镜像体积压下来。你想想看,一个 2MB 的根文件系统跑在 4MB Flash 上,是不是很有成就感?