2、环境准备:在Ubuntu上安装Buildroot依赖包,下载Buildroot源码,了解目录结构
好,咱们正式开始动手了。这一章说白了就是搭台子——把Buildroot跑起来之前,先把环境收拾利索。我见过不少新手卡在这一步,不是缺包就是版本不对,折腾半天连个菜单都出不来。咱们别走弯路,一次搞定。
2.1 检查你的Ubuntu版本
我个人习惯用Ubuntu 20.04 LTS或22.04 LTS。为什么强调LTS?因为稳定。Buildroot的维护者主要在这两个版本上测试,你跟着走最省心。
先看看你的系统版本:
lsb_release -a
如果输出显示的是18.04或更老的版本,我建议你升级一下。不是不能跑,但有些依赖包的老版本会让你多花时间排查问题。
2.2 安装Buildroot依赖包
Buildroot的依赖说多不多,说少不少。核心就那几样:gcc、make、flex、bison、ncurses库。但缺一个就卡住,你想想看,编译到一半弹个错误退出来,多扫兴。
直接跑下面这条命令,一次性装齐:
sudo apt update
sudo apt install -y \
build-essential \
gcc \
g++ \
make \
cmake \
flex \
bison \
libncurses-dev \
libssl-dev \
libelf-dev \
bc \
cpio \
rsync \
unzip \
wget \
file \
git \
python3 \
python3-pip
嗯,这里要注意:libncurses-dev 是必须的,没有它你连 make menuconfig 都跑不起来。我刚开始学的时候就是漏了这个,对着黑乎乎的终端干瞪眼。
python3 版本是3.10以上。Buildroot有些脚本依赖Python 3的特性,版本太低会报语法错误。
2.3 下载Buildroot源码
依赖装好了,接下来拿源码。我推荐两种方式,你选一个顺手的。
方式一:从官网下载稳定版(推荐新手)
Buildroot每年发布两个稳定版,比如2024.02、2024.08。稳定版经过充分测试,坑少。去 https://buildroot.org/downloads/ 找到最新稳定版,用wget拉下来:
wget https://buildroot.org/downloads/buildroot-2024.02.tar.gz
tar -xzf buildroot-2024.02.tar.gz
cd buildroot-2024.02
方式二:从Git仓库克隆(适合想尝鲜的)
如果你想用最新特性,或者参与社区开发,直接克隆:
git clone https://git.buildroot.net/buildroot
cd buildroot
我个人习惯用Git方式。为什么?因为方便切换分支。比如你做到一半发现某个版本有bug,切回上一个版本就一行命令的事。
git checkout 2024.02。
2.4 了解Buildroot目录结构
源码下载完了,别急着编译。先花10分钟看看目录结构。我当年就是直接 make,结果编译完了都不知道生成的镜像在哪。你想想看,多尴尬。
用 ls -l 看看顶层目录:
ls -l
你会看到一堆目录和文件。别慌,核心的就这几个:
| 目录/文件 | 作用 | 我的经验 |
|---|---|---|
arch/ |
存放CPU架构相关的配置 | ARM、x86、RISC-V的配置都在这里。你选目标平台时,Buildroot会从这里读取默认参数。 |
board/ |
板级支持包(BSP) | 比如树莓派、BeagleBone的默认配置和补丁。我一般先在这里找有没有现成的配置,省得从头配。 |
configs/ |
默认配置文件 | 这是重点!make raspberrypi4_defconfig 这种命令,就是从这里读取配置的。你以后自己写的配置也可以放这里。 |
package/ |
所有软件包的构建规则 | 每个子目录对应一个包,比如 package/busybox/。你想加什么软件,就在这里写.mk和Config.in文件。 |
fs/ |
文件系统生成逻辑 | ext4、squashfs、initramfs等格式的生成脚本都在这里。我调文件系统大小时经常翻这里的代码。 |
toolchain/ |
交叉编译工具链 | Buildroot可以自己编译工具链,也可以用外部工具链。这里就是控制逻辑。 |
output/ |
编译输出目录(首次编译后生成) | 镜像、根文件系统、内核都在这里。你以后最常进的目录就是它。 |
dl/ |
下载的源码包缓存 | Buildroot会自动下载所有包的源码,存在这里。下次编译不用重新下载。 |
还有几个关键文件:
- Makefile:顶层构建入口。你执行的
make命令就是调用它。 - Config.in:顶层配置菜单。所有包的配置选项都通过它组织。
- CHANGES:版本更新日志。我每次升级版本都会先看这个,了解有什么破坏性变更。
configs/ 和 output/ 是你最常打交道的两个目录。前者是配置的起点,后者是编译的终点。
2.5 验证环境是否就绪
装完依赖、下载完源码,咱们快速验证一下。跑个最简单的命令:
make help
如果能看到一长串帮助信息,说明环境基本没问题。如果报错说缺什么包,回去检查2.2节,看看是不是漏装了。
再试试:
make menuconfig
如果弹出一个蓝色的配置界面,恭喜你,环境准备完毕。如果报错说 ncurses 找不到,那就是 libncurses-dev 没装好。
make menuconfig 时,Buildroot会检查所有依赖。如果缺包,它会明确告诉你缺什么。别慌,按提示装就行。
2.6 我的一点建议
环境准备这一步,看起来简单,但很多人栽跟头。我总结三条:
- 用LTS版Ubuntu,别追新。20.04或22.04最稳。
- 依赖包一次装齐,别等报错了再补。省得编译到一半中断。
- 先看目录结构再动手,花10分钟了解布局,后面能省一小时。
好,环境准备好了。下一章咱们就正式开始配置和编译,做一个真正的最小嵌入式Linux系统。到时候你会看到,Buildroot到底有多强大。