3、Buildroot环境搭建:下载源码、安装依赖、配置编译环境
好,咱们进入正题。这一章要解决的是「怎么让Buildroot跑起来」的问题。
说白了,就是三件事:拿到源码、装好依赖、配好环境。这三步走完,你就能敲下第一行 make 命令了。
3.1 下载Buildroot源码
我个人习惯把源码放在 /opt 或者 ~/workspace 下面。你随意,但路径里别带中文和空格,不然编译时容易出些莫名其妙的错。
下载方式有两种,我分别说一下:
方式一:从官网下载稳定版(推荐)
wget https://buildroot.org/downloads/buildroot-2023.02.tar.gz
tar -xvf buildroot-2023.02.tar.gz
cd buildroot-2023.02/
嗯,这里要注意:版本号别选太新。我遇到过几次,刚发布的版本有些包还没适配好,编译到一半报错,查半天发现是上游依赖的问题。2023.02 这个 LTS 版本我用着挺稳。
方式二:从Git仓库克隆(适合想尝鲜的)
git clone https://git.buildroot.net/buildroot
cd buildroot
git checkout 2023.02.x
为什么我建议切到稳定分支?因为 master 分支天天在变,你今天配好的环境,下周可能就编译不过了。做产品开发,稳定第一。
3.2 安装依赖包
这一步是很多人翻车的地方。你想想看,Buildroot 本质上是个「自动化编译工厂」,它要调用 gcc、make、flex、bison 等等一堆工具。缺一个,编译就卡住。
我在 Ubuntu 20.04/22.04 上常用的安装命令:
sudo apt update
sudo apt install -y \
build-essential \
libncurses-dev \
flex bison \
bc \
cpio \
rsync \
unzip \
file \
wget \
git \
python3 \
python3-distutils
apt install 换成 yum install 或 dnf install,包名基本一样。但 libncurses-dev 在 Red Hat 系里叫 ncurses-devel。
装完之后,验证一下关键工具:
gcc --version
make --version
flex --version
bison --version
如果哪个命令报「command not found」,那就是没装上,回头再装一遍。
python3-distutils,结果编译到内核配置那一步直接报错,提示找不到 distutils 模块。查了半小时才发现是 Python 包没装全。所以,别偷懒,一条一条对着装。
3.3 配置编译环境
环境配置其实就两件事:选目标平台和选组件。
Buildroot 提供了一个图形化配置界面,跟 Linux 内核的 menuconfig 长得一模一样。运行:
make menuconfig
你会看到一个蓝底黄字的界面。这里我带你走一遍关键配置项:
| 配置项 | 说明 | 我的建议 |
|---|---|---|
| Target Architecture | 目标CPU架构 | ARM、ARM64、x86_64 选一个 |
| Target Architecture Variant | CPU具体型号 | 比如 cortex-a7、cortex-a53 |
| Target Binary Format | 可执行文件格式 | ARM 选 ELF,ARM64 选 ELF64 |
| Target Options | 浮点运算、对齐方式等 | 默认即可,除非你特别清楚 |
| Toolchain type | 工具链来源 | 选 Buildroot 内置的,省心 |
| System configuration | 根文件系统配置 | 设置主机名、密码、启动方式 |
我个人习惯先选好架构,其他保持默认,先编译一次看看能不能跑通。能跑通再慢慢加功能。这叫「最小系统先行」。
3.4 知识体系总览
下面这张图,是我画的环境搭建流程。你看一眼,心里就有谱了:
3.5 验证环境是否就绪
配置完 menuconfig 之后,先别急着 make。我教你一个快速验证的方法:
make defconfig
make -j$(nproc)
这里 -j$(nproc) 的意思是「用满所有CPU核心来编译」。如果你的机器是4核,那就是 -j4。我第一次用8核机器编译时,看着终端刷刷刷地滚屏,那感觉确实挺爽的。
make 会继续,不会从头开始。
编译完成后,在 output/images/ 目录下会生成 rootfs.tar 或 rootfs.cpio 等文件。看到它们,就说明环境搭建成功了。
嗯,到这里,Buildroot 的环境就搭好了。下一章我们会用它来真正构建一个最小根文件系统,到时候你就知道这几步准备工作的价值了。