3、快速上手:第一个最小系统

好,咱们直接进入正题。这一章的目标很明确——让你亲手跑通第一个 Buildroot 构建的 Linux 系统。说白了,就是从零开始,配置目标平台、选内核版本、执行编译,最后烧录到板子上验证启动。

我个人习惯把这一步叫做「破冰之旅」。为什么?因为很多初学者卡在环境搭建和配置上,一卡就是好几天。我当年第一次用 Buildroot 时,光选错内核版本就折腾了三个小时。嗯,咱们今天不走弯路。

3.1 配置目标平台

先说说目标平台。你手头是什么板子?树莓派 3B+?还是 QEMU 模拟器?我这里以 树莓派 3B+ 为例,因为这是最常用的入门平台。

执行以下命令进入配置界面:

make raspberrypi3_defconfig
make menuconfig

第一行命令是加载树莓派 3 的默认配置。第二行是打开图形化配置菜单。你想想看,这就像给 Buildroot 一个「模板」,然后你再微调。

menuconfig 中,你需要确认以下几项:

  • Target options → Target Architecture:ARM (little endian)
  • Target options → Target Architecture Variant:cortex-a53
  • Toolchain → Enable C++ support:建议勾上(很多应用需要)
  • System configuration → Root filesystem overlay directories:这里可以指定你的自定义文件覆盖层
我的小技巧: 如果你不确定架构变体,直接用默认的 cortex-a7 也行,兼容性更好。我在项目中遇到过用 cortex-a53 编译出来的内核在旧版树莓派上起不来的情况。

3.2 选择内核版本

内核版本怎么选?这是个好问题。Buildroot 默认会带一个内核版本,但未必是最适合你的。

我个人建议:选 LTS 版本。比如当前稳定的是 6.1.x LTS。为什么?因为 LTS 版本维护周期长,bug 修复及时,社区支持好。

menuconfig 中:

Kernel → Linux Kernel → Kernel version → 6.1.31

如果你用的是树莓派,还可以选 Raspberry Pi 官方内核

Kernel → Linux Kernel → Kernel version → Custom Git repository
Kernel → Linux Kernel → Custom repository URL → https://github.com/raspberrypi/linux
Kernel → Linux Kernel → Custom repository branch → rpi-6.1.y
注意: 我曾经用主线内核编译树莓派,结果 HDMI 输出死活没信号。后来换成官方内核分支,一次搞定。所以,树莓派用户请务必用官方内核分支。

3.3 执行第一次编译

配置完成后,保存退出。然后执行:

make -j$(nproc)

这里 -j$(nproc) 是让编译使用所有 CPU 核心。我第一次编译时,傻傻地用 make -j1,结果等了快两个小时。后来发现用 4 核,20 分钟就搞定了。

编译过程中,你会看到大量输出。别慌,这是正常的。如果遇到错误,先检查:

  • 网络是否通畅(Buildroot 会下载源码包)
  • 磁盘空间是否充足(至少 10GB 空闲)
  • 依赖包是否安装(如 gcc、make、flex、bison 等)
避坑指南: 我曾经在 Ubuntu 22.04 上编译,提示缺少 ncurses-dev。执行 sudo apt install libncurses-dev 后解决。如果你遇到类似问题,先看错误日志的最后几行,通常会有提示。

编译成功后,你会看到类似这样的输出:

>>>   Generating root filesystem image...
>>>   Generating bootable image...
>>>   Done

生成的镜像文件在 output/images/ 目录下。对于树莓派,你会看到:

文件 说明
zImage 压缩的内核镜像
dtbs/ 设备树文件
rootfs.ext4 根文件系统镜像
sdcard.img 完整的 SD 卡镜像(可直接烧录)

3.4 烧录与启动验证

烧录很简单。把 SD 卡插入电脑,找到设备名(比如 /dev/sdb),然后:

sudo dd if=output/images/sdcard.img of=/dev/sdb bs=4M status=progress
sync

注意:/dev/sdb 是你的 SD 卡设备,千万别写错!我见过有人把硬盘写成了 /dev/sda,结果...嗯,你懂的。

烧录完成后,把 SD 卡插入树莓派,上电启动。通过串口(或 HDMI)观察启动日志。如果一切正常,你会看到:

Starting kernel ...
[    0.000000] Booting Linux on physical CPU 0x0
...
Welcome to Buildroot
buildroot login:

输入默认用户名 root,密码为空(或 root),即可登录系统。

验证小技巧: 登录后执行 uname -a 查看内核版本,执行 free -h 查看内存,执行 df -h 查看磁盘。如果这些命令都能正常输出,恭喜你,第一个最小系统跑通了!

3.5 常见问题与解决

这里列几个我踩过的坑:

  • 启动后卡在「Waiting for root device」:通常是内核没有正确识别 SD 卡分区。检查设备树文件是否正确,或者内核配置中是否开启了 MMC/SD 驱动。
  • 串口无输出:检查串口线是否接对(TX/RX/GND),波特率是否设置为 115200。
  • 网络不通:树莓派 3B+ 的网卡是 LAN7515,需要内核开启 USB 网络驱动。在 menuconfig 中搜索 LAN7515 并勾选。

好了,到这里你已经完成了第一个最小系统的构建。从配置到编译,再到烧录启动,整个过程其实并不复杂。关键是每一步都要细心,尤其是内核版本和配置选项。

下一章,我们会深入 Buildroot 的配置系统,看看那些 .config 文件到底在干什么。到时候你会发现,其实 Buildroot 的配置逻辑非常清晰,只是文档写得不够友好而已。