2. 环境搭建:在Ubuntu上安装Buildroot依赖、下载Buildroot源码、首次编译体验

好,咱们正式开始动手了。

这一章的目标很简单:在你的Ubuntu机器上,把Buildroot跑起来。说白了,就是装好依赖、拉下源码、敲一条命令,然后看着它编译出一个完整的根文件系统。我第一次做这件事的时候,心里还挺没底的——毕竟那时候对嵌入式Linux的理解还停留在“能开机就行”的阶段。但后来发现,其实门槛没那么高。

2.1 安装Buildroot依赖

Buildroot本身是个构建系统,它不依赖什么复杂的图形界面,但需要一堆命令行工具和库。我个人的习惯是,先更新一下包管理器,再批量安装。

打开终端,执行:

sudo apt update
sudo apt upgrade -y

然后安装核心依赖:

sudo apt install -y build-essential git wget cpio unzip rsync bc
sudo apt install -y libncurses5-dev libssl-dev flex bison

嗯,这里要注意一下。如果你用的是Ubuntu 22.04或更新的版本,可能还需要装 libncurses-dev 而不是 libncurses5-dev。我曾经在升级系统后忘了这茬,结果编译时弹出一堆头文件找不到的错误,排查了半天才发现是库名变了。

另外,如果你打算编译带图形界面的系统,比如Qt或GTK应用,那还得装:

sudo apt install -y libgtk-3-dev libglib2.0-dev

不过对于第一次体验,上面那两行就够了。

小提示: 如果你用的是虚拟机,建议给Ubuntu分配至少4GB内存和2个CPU核心。我第一次用1核2GB的配置编译,等了快两个小时……那感觉,就像看着蜗牛爬长城。

2.2 下载Buildroot源码

Buildroot的源码托管在GitHub上,我们用git克隆下来就行。我个人习惯把源码放在 ~/workspace/buildroot 目录下,方便管理。

mkdir -p ~/workspace
cd ~/workspace
git clone https://github.com/buildroot/buildroot.git

克隆完成后,你会看到一个 buildroot 文件夹。进去看看:

cd buildroot
ls -l

你会看到一堆目录和文件,比如 board/configs/package/Makefile 等等。别慌,这些我们后面会慢慢讲。现在你只需要知道,configs/ 里放着各种开发板的默认配置,package/ 里是各种软件包的构建规则。

我建议你切到一个稳定的版本,而不是用最新的master分支。因为master可能正在开发中,说不定哪天就编译不过了。比如:

git checkout 2024.02.x

这个版本号你可以去Buildroot官网查一下,选一个长期支持版(LTS)就好。我在项目中吃过master分支的亏——有一次急着赶项目,结果编译到一半报错,才发现是某个包的版本不兼容。从那以后,我再也不敢用master做生产环境了。

2.3 首次编译体验

好,现在我们来编译一个最小的系统。Buildroot支持很多开发板,比如树莓派、BeagleBone、QEMU模拟器等。对于第一次体验,我强烈建议你用QEMU的配置,因为不需要真实硬件,直接在电脑上就能跑起来。

执行:

make qemu_x86_64_defconfig

这条命令会加载一个针对x86_64架构的QEMU默认配置。你可以把它理解为“Buildroot的出厂设置”。

然后,开始编译:

make

第一次编译会下载很多源码包,比如Linux内核、BusyBox、glibc等等。这个过程取决于你的网速和机器性能。我自己的机器(i7-10750H,16GB内存)大概需要20-30分钟。如果你用的是老一点的笔记本,可能得一个小时左右。

编译过程中,你会看到屏幕上刷刷地滚过各种信息。别怕,这是正常的。如果遇到错误,通常是因为缺少依赖或者网络问题。我遇到过最坑的一次是公司网络屏蔽了某些源码包的下载地址,结果卡在某个包上下载不下来。解决办法要么换源,要么手动下载放到 dl/ 目录下。

注意: 编译过程中不要中断终端,否则下次重新编译可能会花更长时间。如果实在要停,建议用 Ctrl+C 优雅退出,然后下次用 make 继续。

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

>>>   Generating root filesystem image
>>>   Generating image(s)
...

最后,在 output/images/ 目录下会生成几个文件:

  • rootfs.cpio — 根文件系统镜像
  • bzImage — 内核镜像
  • start-qemu.sh — 启动QEMU的脚本

运行 ./start-qemu.sh,你就能看到一个完整的Linux系统在QEMU里启动了!登录用户名是 root,没有密码。

我第一次看到那个登录提示符的时候,说实话,挺激动的。一个从零开始构建的Linux系统,就这么跑起来了。虽然它很小,但五脏俱全——有shell、有文件系统、有网络协议栈。那一刻你会觉得,之前装依赖、等编译的那些时间,都值了。

2.4 本章知识体系

下面这张图帮你梳理一下整个环境搭建的流程和核心逻辑:

环境搭建核心流程 安装依赖 build-essential, ncurses, flex, bison, git, wget... 下载源码 git clone 或 下载压缩包 建议使用LTS版本 首次编译 make qemu_x86_64_defconfig make 编译产物(output/images/) rootfs.cpio bzImage start-qemu.sh 根文件系统 内核镜像 启动脚本 运行 ./start-qemu.sh ✅ 系统启动成功!

这张图把整个流程串起来了:从安装依赖,到下载源码,再到编译和验证。你跟着走一遍,就能得到一个可运行的嵌入式Linux系统。虽然现在只是个QEMU模拟器上的最小系统,但别小看它——后面所有复杂的定制,都是在这个基础上展开的。

核心要点:
  • 依赖安装要完整,缺一个包都可能编译失败
  • 源码建议用LTS版本,避免master分支的不稳定性
  • 首次编译用QEMU配置,零硬件成本,快速验证
  • 编译产物在 output/images/ 下,直接可用

好了,环境搭建就到这里。你现在应该已经有一个能跑起来的Buildroot系统了。接下来,我们会深入进去,看看Buildroot到底是怎么组织这些软件包的,以及如何根据自己的需求定制系统。


专注资料整理