2、环境准备:在Ubuntu上安装Buildroot依赖包,下载Buildroot源码,了解目录结构

好,咱们正式开始动手了。这一章说白了就是搭台子——把Buildroot跑起来之前,先把环境收拾利索。我见过不少新手卡在这一步,不是缺包就是版本不对,折腾半天连个菜单都出不来。咱们别走弯路,一次搞定。

2.1 检查你的Ubuntu版本

我个人习惯用Ubuntu 20.04 LTS或22.04 LTS。为什么强调LTS?因为稳定。Buildroot的维护者主要在这两个版本上测试,你跟着走最省心。

先看看你的系统版本:

lsb_release -a

如果输出显示的是18.04或更老的版本,我建议你升级一下。不是不能跑,但有些依赖包的老版本会让你多花时间排查问题。

注意: 别用WSL1,用WSL2或者原生Ubuntu。WSL1的内核不完整,编译时可能莫名其妙报错。我曾经在这上面浪费过一整天。

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 都跑不起来。我刚开始学的时候就是漏了这个,对着黑乎乎的终端干瞪眼。

小技巧: 如果你用的是Ubuntu 22.04,记得确认一下 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克隆后直接编译,结果报了一堆错。后来发现是master分支正在开发中,有些提交还没稳定。建议你切到最近的稳定tag上: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 我的一点建议

环境准备这一步,看起来简单,但很多人栽跟头。我总结三条:

  1. 用LTS版Ubuntu,别追新。20.04或22.04最稳。
  2. 依赖包一次装齐,别等报错了再补。省得编译到一半中断。
  3. 先看目录结构再动手,花10分钟了解布局,后面能省一小时。

好,环境准备好了。下一章咱们就正式开始配置和编译,做一个真正的最小嵌入式Linux系统。到时候你会看到,Buildroot到底有多强大。