第2章:环境搭建——Linux主机环境准备
好,咱们正式开始动手了。这一章我带你搭好开发环境。说实话,嵌入式开发最怕的就是环境折腾半天搞不定。我早期做项目时,光装依赖包就浪费了两天——后来发现是源的问题。嗯,咱们今天一次搞定。
2.1 主机系统选择:Ubuntu还是Debian?
我个人习惯用 Ubuntu 20.04 LTS 或 22.04 LTS。为什么?因为Buildroot官方CI测试主要跑在Ubuntu上,兼容性最好。Debian当然也行,但有些包名不一样,你得自己适配。
我的推荐:
- 新手:Ubuntu 22.04 LTS(文档多,遇到问题好搜)
- 老手:Debian 11/12(更稳定,资源占用低)
- 虚拟机:建议分配4核CPU + 8GB内存 + 40GB磁盘
注意:别用Windows WSL1,文件系统性能太差。WSL2勉强可以,但我建议直接用虚拟机或双系统。我曾经在WSL1上编译Buildroot,一个全编译跑了6小时——换到原生Linux只要40分钟。
2.2 安装必要依赖包
Buildroot对主机依赖其实不多,但缺一个就编译不过。我整理了一个清单,你直接复制粘贴就行。
Ubuntu/Debian通用命令:
sudo apt update
sudo apt install -y \
build-essential \
git \
wget \
cpio \
unzip \
rsync \
bc \
python3 \
python3-distutils \
file \
libncurses-dev \
libssl-dev \
flex \
bison \
u-boot-tools \
device-tree-compiler
小技巧:如果你要编译32位工具链(比如给ARM Cortex-A7用),还需要装32位库:
sudo apt install -y libc6:i386 libncurses5:i386 libstdc++6:i386
我有个项目用全志H3芯片,没装这个库,编译到一半报错,排查了半天才发现是缺少32位兼容库。
2.3 获取Buildroot源码
Buildroot的源码托管在GitHub上。我个人建议用 长期支持版本(LTS),比如2023.02.x或2024.02.x。为什么?因为这些版本会持续修复bug,而且社区支持时间长。
方法一:下载稳定版压缩包(推荐新手)
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 checkout 2024.02
我个人习惯:用Git克隆,因为可以随时切分支、看提交历史。遇到编译问题,用 git bisect 能快速定位是哪个提交引入的bug。这个技巧帮我省了不少时间。
2.4 目录结构初探
好,源码拿到了。咱们看看里面都有什么。你执行 ls -l 会看到一堆目录和文件。别慌,我带你捋一遍核心结构。
| 目录/文件 | 作用 | 我的备注 |
|---|---|---|
arch/ |
架构相关配置(ARM、x86、RISC-V等) | 一般不用动,除非你要加新架构 |
board/ |
板级支持包(uboot、内核配置、补丁) | 这是你定制板子的主战场 |
configs/ |
默认配置文件(类似内核的defconfig) | 我经常从这里复制一份改 |
package/ |
所有软件包的构建脚本 | 这是咱们课程的核心,后面会细讲 |
fs/ |
文件系统生成逻辑 | ext4、squashfs、initramfs都在这里 |
toolchain/ |
工具链相关 | 可以选外部工具链或让Buildroot自己编译 |
dl/ |
下载的源码包缓存 | 编译一次后,下次不用重新下载 |
output/ |
编译输出目录 | images、build、target都在里面 |
Makefile |
顶层Makefile | 入口文件,你执行 make 就是它 |
快速上手命令:
# 查看支持的板子
make list-defconfigs | grep raspberry
# 查看当前配置
make menuconfig
# 查看目录树(安装tree工具后)
tree -L 2 -d
2.5 验证环境是否正常
环境搭好了,咱们跑个最小测试。选一个最简单的配置编译试试。
# 以qemu_x86_64为例(不需要真硬件)
make qemu_x86_64_defconfig
make
第一次编译会下载所有依赖的源码包,大概需要20-40分钟(看网速和CPU)。编译完成后,在 output/images/ 下会生成 rootfs.ext2 和 bzImage。
验证方法:
# 用QEMU启动看看
qemu-system-x86_64 \
-kernel output/images/bzImage \
-drive file=output/images/rootfs.ext2,format=raw \
-append "root=/dev/sda console=ttyS0" \
-nographic
看到登录提示符,说明环境搭建成功!
常见坑:
- 编译到一半报错
*** No rule to make target—— 通常是依赖包没装全,回头检查2.2节 - 下载源码包超时 —— 换个源或挂代理,我一般用
export BUILDROOT_DL_DIR=/path/to/cache复用下载缓存 - 磁盘空间不足 ——
output/目录会占用5-10GB,确保有足够空间
2.6 本章小结
到这步,你的Linux主机环境就准备好了。我们做了三件事:装了依赖包、下了Buildroot源码、看了目录结构。最后还编译了一个最小系统验证环境。
下一章,咱们会深入 package/ 目录,看看一个软件包到底是怎么被Buildroot管理起来的。你想想看,从下载源码到编译安装,Buildroot是怎么做到一键搞定的?嗯,到时候你就明白了。
课后小作业:试试 make raspberrypi4_defconfig,然后看看 configs/ 目录下多了什么。再对比一下 qemu_x86_64_defconfig 和 raspberrypi4_defconfig 的差异。这个练习能帮你快速理解不同板子的配置差异。