第1章:环境准备——在Ubuntu上搭建Buildroot开发环境
大家好,我是老李。做嵌入式Linux开发这些年,我踩过最多的坑,就是环境没配好就开始干活。你想想看,代码写得再漂亮,编译不过去,那都是白搭。所以这一章,咱们先把地基打牢。
Buildroot这个工具,说白了就是一个自动化构建系统。它能帮你从零开始,生成一个完整的嵌入式Linux系统——包括交叉编译工具链、根文件系统、内核、bootloader,一条龙搞定。但前提是,你的开发环境得先准备好。
核心要点:Buildroot本身不挑Ubuntu版本,但依赖包必须装全。缺一个,编译就可能卡在某个奇怪的地方。
1.1 我推荐的Ubuntu版本
我个人习惯用Ubuntu 20.04 LTS或22.04 LTS。为什么?因为这两个版本稳定,社区支持好,而且Buildroot官方CI测试主要就是在这两个版本上跑的。
如果你用的是Ubuntu 18.04,也能用,但有些依赖包需要手动装。Ubuntu 24.04我也试过,目前兼容性还行,但个别老版本Buildroot可能会有小问题。
| Ubuntu版本 | 推荐度 | 备注 |
|---|---|---|
| 20.04 LTS | ⭐⭐⭐⭐⭐ | 最稳定,社区支持最好 |
| 22.04 LTS | ⭐⭐⭐⭐⭐ | 新一些,依赖包版本更新 |
| 24.04 LTS | ⭐⭐⭐⭐ | 可用,但建议用Buildroot 2024.02以上版本 |
| 18.04 LTS | ⭐⭐⭐ | 需要手动补充一些依赖 |
1.2 安装必要依赖包
嗯,这里要注意。Buildroot的依赖包分两类:一类是必须装的,少了它编译直接报错;另一类是建议装的,不装也能用,但某些功能会受限。
先上命令,咱们一次性装完:
sudo apt update
sudo apt install -y \
git \
wget \
curl \
make \
gcc \
g++ \
gperf \
bison \
flex \
texinfo \
help2man \
unzip \
libtool \
libtool-bin \
automake \
autoconf \
libncurses5-dev \
libncursesw5-dev \
python3 \
python3-pip \
python3-venv \
rsync \
file \
cpio \
bc \
patch \
diffutils \
build-essential \
libssl-dev \
libelf-dev \
device-tree-compiler
这条命令我几乎每搭一个新环境都要跑一遍。你可能会问:「这么多包,每个都是干嘛的?」别急,我挑几个重点说说。
1.3 关键依赖包解读
build-essential:这个包组包含了gcc、g++、make等基础编译工具。没有它,你连hello world都编译不了。
libncurses5-dev / libncursesw5-dev:Buildroot的menuconfig配置界面依赖这个。我曾经有一次忘了装,结果make menuconfig报错,折腾了半天才发现是缺了这个。
libssl-dev / libelf-dev:编译内核和某些第三方包时需要。特别是现在很多包都要求HTTPS下载,libssl-dev几乎是必装的。
device-tree-compiler:设备树编译器。做嵌入式Linux开发,设备树是绕不开的。这个包很小,但很重要。
小技巧:如果你不确定某个包是否已安装,可以用 dpkg -l | grep 包名 来检查。比如 dpkg -l | grep libssl-dev。
1.4 验证环境是否就绪
装完依赖后,我建议你做个快速验证。别等到编译到一半才发现有问题,那太浪费时间了。
# 检查gcc版本
gcc --version
# 检查make版本
make --version
# 检查python3版本
python3 --version
# 检查git版本
git --version
输出应该类似这样:
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
GNU Make 4.2.1
Python 3.8.10
git version 2.25.1
版本号不用完全一致,只要不是太老就行。比如gcc 4.x就有点过时了,建议升级。
1.5 下载Buildroot源码
环境配好了,接下来就是下载Buildroot本身。我个人习惯用git clone,这样以后切换版本、查看历史都很方便。
# 创建一个工作目录
mkdir -p ~/buildroot_workspace
cd ~/buildroot_workspace
# 克隆Buildroot官方仓库
git clone https://git.buildroot.net/buildroot
# 进入目录
cd buildroot
# 查看所有可用版本
git tag -l | head -20
你会看到类似这样的输出:
2024.02
2024.02.1
2024.02.2
2024.05
2024.05.1
2024.08
...
我建议新手从最新的稳定版开始。比如现在最新的是2024.08,那就用这个:
git checkout 2024.08
注意:不要用master分支。master是开发分支,可能随时有变动,不稳定。咱们做项目,稳定第一。
1.6 第一次编译测试
下载完源码后,我建议你跑一次快速编译测试,确认环境真的没问题。咱们选一个最简单的配置——qemu_x86_64_defconfig,这个配置不需要真实硬件,用QEMU就能跑。
# 配置
make qemu_x86_64_defconfig
# 开始编译(-j后面跟CPU核心数,比如4核就写-j4)
make -j$(nproc)
第一次编译会比较慢,因为要下载很多源码包。Buildroot会自动下载、解压、打补丁、编译,整个过程全自动。你只需要泡杯咖啡等着就行。
编译成功后,你会看到类似这样的输出:
>>> Generating root filesystem image
>>> Generating images
>>> Done
生成的镜像文件在 output/images/ 目录下。用QEMU可以启动它:
# 启动测试
qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,format=raw -append "root=/dev/sda" -nographic
看到登录提示符,说明你的环境完全OK了。
1.7 避坑指南
我遇到过不少新手在环境准备阶段卡住,这里列几个常见问题:
- 「Permission denied」错误:多半是当前用户没有写权限。建议用普通用户操作,不要用root。如果遇到权限问题,检查目录权限,而不是直接sudo make。
- 「Package not found」错误:依赖包没装全。回头检查一下1.2节的命令,确保所有包都装上了。
- 「Download failed」错误:网络问题。Buildroot需要从网上拉取源码包,如果网络不稳定,可以配置国内镜像源。在menuconfig中设置
BR2_BACKUP_SITE为清华或中科大的镜像。 - 「Out of memory」错误:编译时内存不够。特别是用
-j$(nproc)时,如果虚拟机内存只有2GB,建议改成-j2或-j1。
我的经验:如果你用的是虚拟机,建议分配至少4GB内存和2个CPU核心。磁盘空间预留20GB以上。Buildroot编译过程中会下载大量源码包,加上编译产物,空间消耗不小。
1.8 本章知识体系
为了让你更直观地理解本章的内容,我画了一张流程图:
这张图把整个环境准备的流程串起来了。从选择Ubuntu版本开始,到安装依赖、验证环境、下载源码,最后做一次编译测试。如果测试失败,就回到依赖检查环节;如果成功,恭喜你,环境就绪了。
1.9 小结
这一章的内容其实不多,但很重要。我见过太多人一上来就急着编译,结果缺这个少那个,折腾半天。你想想看,如果连环境都没配好,后面的学习怎么进行?
我个人建议,花点时间把这一步做扎实。依赖包装全,源码下载好,编译测试跑通。这样后面学配置、学定制、学调试的时候,你才能把精力放在真正重要的地方。
好了,环境准备好了。接下来你就可以开始探索Buildroot的配置世界了。