第2章:环境搭建——Linux主机环境准备

好,咱们正式开始动手了。这一章我带你搭好开发环境。说实话,嵌入式开发最怕的就是环境折腾半天搞不定。我早期做项目时,光装依赖包就浪费了两天——后来发现是源的问题。嗯,咱们今天一次搞定。

2.1 主机系统选择:Ubuntu还是Debian?

我个人习惯用 Ubuntu 20.04 LTS22.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.ext2bzImage

验证方法:

# 用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_defconfigraspberrypi4_defconfig 的差异。这个练习能帮你快速理解不同板子的配置差异。