环境搭建:Ubuntu开发环境配置、必要工具链安装、获取Buildroot源码、首次编译体验
好,咱们正式开始动手了。
这一章,说白了就是「把家伙事儿备齐」。我见过太多新手,一上来就急着编译,结果环境没配好,卡在某个莫名其妙的报错上,一折腾就是半天。咱们别走弯路,一步步来。
1. Ubuntu 开发环境配置
我个人习惯用 Ubuntu 20.04 LTS 或 22.04 LTS。为什么?因为 Buildroot 社区和各大芯片厂商的 SDK,基本都在这两个版本上验证过。你非要用最新的 24.04 也行,但可能会遇到一些包版本不兼容的小坑。
装好系统后,第一件事:换源。别用官方源,慢得让人抓狂。换成清华或者中科大的镜像源,速度直接起飞。
# 备份原源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 编辑源列表(以清华源为例,Ubuntu 22.04)
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
# 更新
sudo apt update
sudo apt upgrade -y
sudo apt update && sudo apt upgrade,确保所有包都是最新的。这能避免很多因为依赖库版本过低导致的编译错误。
2. 必要工具链安装
Buildroot 本身会下载交叉编译工具链,但宿主机上需要一些基础工具。嗯,这里要注意,缺了这些,你连 make 都跑不起来。
我曾经在一台新装的服务器上直接编译,结果报错说 gcc 找不到。当时我还纳闷,明明装了呀?后来发现是 build-essential 这个元包没装,它包含了 gcc、g++、make 等一系列基础工具。
直接一条命令搞定:
sudo apt install -y build-essential libncurses-dev bison flex \
libssl-dev libelf-dev bc rsync unzip wget git
解释一下几个关键包:
- build-essential:编译器、链接器、make 等基础工具合集
- libncurses-dev:提供
make menuconfig的图形化界面支持 - bison, flex:词法分析和语法分析工具,内核和 Buildroot 的配置系统依赖它们
- libssl-dev:编译内核时,如果开启了模块签名等功能,需要这个
- bc:一个计算器工具,内核编译脚本里会用到
libncurses-dev 版本太旧,导致 menuconfig 界面显示乱码。解决办法是升级到 20.04 或手动安装新版本。所以,尽量用 LTS 的最新版本。
3. 获取 Buildroot 源码
源码获取有两种方式:
- 从官网下载稳定版:访问
buildroot.org,下载.tar.gz或.tar.bz2压缩包。 - 从 Git 仓库克隆:获取最新开发版,或者特定分支。
我个人更推荐用 Git。为什么?因为你可以随时 git pull 获取更新,还能用 git checkout 切换到某个稳定 tag。比如我手头有个项目,一直用 2023.02.x 分支,稳定可靠。
# 克隆最新源码
git clone https://git.buildroot.net/buildroot
# 进入目录
cd buildroot
# 查看所有可用分支和标签
git branch -a
git tag -l
# 切换到某个稳定版本(例如 2023.02.1)
git checkout 2023.02.1
master 分支。选一个 LTS 版本(比如 2023.02.x 或 2024.02.x),这些版本会持续维护两年,bug 修复更及时。
4. 首次编译体验
好了,环境配好了,源码也拿到了。咱们来跑一次完整的编译流程。别怕,这次只是体验,不涉及具体硬件配置。
Buildroot 的编译流程,说白了就是三步:
- 配置:选择目标架构、工具链、软件包等
- 编译:自动下载源码、交叉编译、打包
- 输出:生成根文件系统镜像、内核镜像、引导加载程序等
咱们先试一个最简单的配置——qemu_x86_64_defconfig。这个配置会生成一个可以在 QEMU 模拟器上运行的 x86_64 系统镜像。不需要真实硬件,纯软件模拟,最适合入门。
# 加载默认配置
make qemu_x86_64_defconfig
# 查看配置(可选)
make menuconfig
# 开始编译
make
第一次编译会花很长时间,取决于你的网络和 CPU。Buildroot 会自动下载所有依赖包的源码,然后交叉编译。你想想看,它要下载 Linux 内核、Busybox、glibc、各种工具……加起来少说几百兆。
我建议你泡杯咖啡,或者去做点别的。第一次编译,在我的 i7-8700 机器上,大概花了 40 分钟。
编译成功后的输出目录:
编译完成后,所有生成的文件都在 output/images/ 目录下:
rootfs.ext2:根文件系统镜像bzImage:Linux 内核镜像startup.nsh:UEFI 启动脚本
你可以用 QEMU 来运行它:
# 启动 QEMU 模拟器
qemu-system-x86_64 -M pc -kernel output/images/bzImage \
-drive file=output/images/rootfs.ext2,if=virtio,format=raw \
-append "root=/dev/vda console=ttyS0" -nographic
看到登录提示符了吗?默认用户名 root,没有密码。恭喜你,你的第一个 Buildroot 系统跑起来了!
make 即可。我曾经在下载 Linux 内核时因为公司网络限制卡住了,后来换了手机热点才搞定。你也可以提前把源码包下载好,放到 dl/ 目录下,Buildroot 会自动识别。
5. 本章小结
这一章,咱们完成了:
- Ubuntu 开发环境的基础配置
- 必要工具链的安装
- Buildroot 源码的获取
- 首次编译并成功运行
说白了,就是搭好了台子。下一章,咱们就要开始真正的主角——配置 Buildroot,选择目标硬件,集成驱动。那才是重头戏。
嗯,先到这。去试试你的第一次编译吧,有问题随时回来翻翻这一章。