2、Buildroot初体验:下载源码、配置树莓派4B、首次编译与烧录启动

好,咱们直接动手。这一章,我带你把Buildroot从零跑一遍。目标很明确:下载源码、配置成树莓派4B、编译、烧录、上电启动。整个过程走下来,你就能看到自己构建的系统在屏幕上跳动了。

说实话,我第一次搞嵌入式Linux时,光搭建交叉编译环境就折腾了两天。后来遇到Buildroot,感觉像是找到了趁手的兵器。嗯,咱们开始吧。

2.1 下载Buildroot源码

Buildroot的源码托管在GitHub上。我个人习惯用git clone,这样后续想切版本、看历史都很方便。

git clone https://git.buildroot.net/buildroot
cd buildroot

如果你想用某个稳定版,可以切到对应的tag。比如2024.02.x长期支持版:

git checkout 2024.02.x

小提示: 我建议你直接用最新的LTS版本。我在项目中吃过亏,用了一个开发版,结果某个驱动死活编不过去。LTS版本经过充分测试,坑少很多。

下载完成后,看看目录结构。你会发现几个关键目录:

  • configs/ —— 存放各种开发板的默认配置
  • package/ —— 所有软件包的构建脚本
  • board/ —— 板级支持文件,比如设备树、启动脚本
  • output/ —— 编译产物,第一次编译后自动生成

你想想看,整个系统就是由这些目录里的脚本和配置拼装出来的。是不是很清晰?

2.2 配置目标平台:树莓派4B

Buildroot为树莓派4B提供了现成的默认配置。我们直接用:

make raspberrypi4_defconfig

这条命令会从configs/目录下加载raspberrypi4_defconfig。说白了,就是告诉Buildroot:我要给树莓派4B做系统,CPU是BCM2711,ARM Cortex-A72,你要把对应的内核、驱动、bootloader都准备好。

加载完后,你可以用make menuconfig来微调配置:

make menuconfig

这里你会看到一个图形化的配置界面。我个人建议,第一次先别乱改。默认配置已经能跑起来了。改多了反而容易出问题。

注意: 如果你用的是树莓派4B的2GB或4GB版本,默认配置都支持。但如果你用的是8GB版本,记得在menuconfig里检查一下内核的CMA内存设置。我曾经帮一个朋友排查问题,他用的8GB版,系统只认到4GB,就是因为CMA配置没调。

2.3 首次编译

配置搞定后,开始编译。执行:

make

嗯,就这么简单。但你要有心理准备,第一次编译会下载很多软件包,包括交叉编译工具链、内核源码、各种库。时间取决于你的网络和机器性能。我自己的经验是,在8核的机器上,第一次编译大概需要40分钟到1小时。

编译过程中,你会看到屏幕上刷刷地滚过各种信息。别慌,这是正常的。如果遇到错误,通常是因为网络问题导致某个包下载失败。这时候重新执行make就行,Buildroot会断点续传。

核心产出: 编译完成后,所有产物都在output/images/目录下。对于树莓派4B,你会看到:

文件说明
sdcard.img完整的SD卡镜像,可以直接烧录
zImage压缩后的Linux内核
bcm2711-rpi-4-b.dtb树莓派4B的设备树文件
rootfs.ext4根文件系统镜像
boot.vfat启动分区镜像,包含bootloader和内核

这里我要多说一句。你看到的sdcard.img其实是一个完整的磁盘镜像,它把boot.vfatrootfs.ext4拼在了一起。Buildroot用了一个脚本自动完成这个拼接,省了我们不少事。

2.4 烧录SD卡

编译完成后,把SD卡插入电脑。先确认设备名:

lsblk

假设你的SD卡是/dev/sdb(注意,不是/dev/sdb1/dev/sdb2)。烧录命令:

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

警告: 千万确认设备名!dd命令不会问你确认,写错了就把你的硬盘数据全抹了。我当年就干过这种事,把公司服务器的硬盘给写了...嗯,从那以后我每次都用lsblk检查三遍。

烧录完成后,弹出SD卡:

sudo eject /dev/sdb

2.5 启动系统

把SD卡插入树莓派4B,接上HDMI显示器和USB键盘,上电。你会看到:

  1. 绿色的ACT灯闪烁,表示正在读取SD卡
  2. 屏幕上出现树莓派的彩虹屏
  3. Buildroot的启动日志刷刷地滚过
  4. 最后出现登录提示符

默认用户名是root,没有密码。直接回车就能登录。

小技巧: 如果你没有显示器,可以在烧录前修改output/images/rpi-firmware/config.txt,加上enable_uart=1,然后通过串口登录。我在做物联网网关时,大部分调试都是通过串口完成的,方便得很。

登录后,你可以试试几个基本命令:

uname -a        # 查看内核版本
free -h         # 查看内存使用
df -h           # 查看磁盘空间
ifconfig        # 查看网络接口

看到这些输出,说明你的Buildroot系统已经成功运行在树莓派4B上了。恭喜你,你已经亲手构建了一个嵌入式Linux系统!

2.6 常见问题与解决

我在教学和项目中遇到过不少问题,挑几个典型的说说:

  • 编译时提示某个包下载失败:通常是网络问题。可以手动下载该包放到dl/目录下,然后重新make
  • 烧录后树莓派不启动:检查SD卡是否插好,或者换个SD卡试试。有些劣质SD卡兼容性不好。
  • 启动后没有网络:树莓派4B的网卡驱动默认是编译进内核的。如果没识别,检查一下设备树是否正确。

嗯,这一章的内容就到这里。你亲手走了一遍Buildroot的完整流程,从下载到启动。下一章,我们会深入配置界面,看看怎么往系统里添加自己的软件包。

公众号:蓝海资料掘金营,微信deep3321