3、快速上手:使用默认配置编译一个最小根文件系统,烧录到QEMU中运行,验证系统启动。
好,咱们直接动手。这一节的目标很简单——用Buildroot的默认配置,编译出一个能跑的最小根文件系统,然后塞进QEMU里看看它能不能正常启动。说白了,就是走一遍完整的流程,让你心里有个底。
我个人习惯,学一个新工具,先跑通一个最小例子再说。别一上来就研究各种配置项,那容易把人绕晕。咱们先让系统转起来,后面再慢慢调优。
3.1 选择目标架构与默认配置
Buildroot支持很多架构。咱们选最通用的x86_64,因为QEMU对它的支持最成熟,踩坑最少。
你想想看,如果选个ARM或RISC-V,还得额外折腾交叉编译链和模拟器参数,没必要。先拿x86_64练手,稳。
核心思路:用 qemu_x86_64_defconfig 这个默认配置,它已经帮我们选好了内核、文件系统类型、以及QEMU需要的启动参数。我们直接编译就行。
3.2 配置与编译步骤
打开终端,进入Buildroot源码目录。执行以下命令:
make qemu_x86_64_defconfig
make -j$(nproc)
第一行命令是加载QEMU x86_64的默认配置。第二行开始编译,-j$(nproc) 表示用你电脑的所有CPU核心并行编译,能快不少。
嗯,这里要注意。第一次编译会下载很多源码包,比如Linux内核、Busybox、glibc等等。网速慢的话,可能要等十几分钟。我建议你泡杯咖啡,或者去干点别的。
小技巧:如果你在公司内网,或者网络环境受限,可以提前把源码包下载好,放到 dl/ 目录下。Buildroot会自动检测并使用本地缓存。我在项目中遇到过好几次网络超时,后来都靠这个办法解决了。
编译完成后,你会看到类似这样的输出:
>>> Generating root filesystem image
>>> Generating kernel image
>>> Generating QEMU start script
关键产物有两个:
output/images/bzImage—— 内核镜像output/images/rootfs.ext2—— 根文件系统镜像
还有一个 output/images/start-qemu.sh 脚本,它封装了QEMU的启动命令,咱们直接用就行。
3.3 启动QEMU并验证系统
执行启动脚本:
cd output/images/
./start-qemu.sh
你会看到一个QEMU窗口弹出来,或者直接在终端里输出启动日志。内核开始加载,然后挂载根文件系统,最后出现登录提示符:
Welcome to Buildroot
buildroot login:
默认用户名是 root,没有密码。直接回车就能登录。
登录后,你可以执行一些基本命令来验证系统是否正常工作:
# 查看根文件系统挂载情况
mount
# 查看进程
ps
# 查看网络接口
ip addr
# 查看内核版本
uname -a
如果这些命令都能正常输出,恭喜你——你的第一个Buildroot根文件系统已经跑起来了!
我曾经踩过的坑:第一次启动时,QEMU窗口一闪就退出了。后来发现是 start-qemu.sh 脚本里默认用了 -nographic 模式,而我的终端不支持。解决办法是手动修改脚本,去掉 -nographic 参数,或者用 Ctrl+A X 退出QEMU。你如果遇到类似情况,可以试试这个办法。
3.4 核心逻辑流程图
下面这张图展示了从配置到运行的完整流程,我建议你对照着看,思路会更清晰。
3.5 验证要点总结
系统启动后,我建议你重点检查以下几项:
| 检查项 | 命令 | 预期结果 |
|---|---|---|
| 根文件系统挂载 | mount |
显示 /dev/root 挂载在 / |
| 进程运行 | ps |
至少看到 init 和 sh 进程 |
| 网络功能 | ip addr |
看到 lo 回环接口 |
| 内核版本 | uname -a |
显示Linux内核版本号 |
个人经验:我刚开始用Buildroot时,总想一步到位,把各种软件包都选上。结果编译时间超长,还经常因为依赖问题报错。后来学乖了——先用最小配置跑通,再逐步添加功能。这个思路,说白了就是「分而治之」,在嵌入式开发里特别实用。
好了,到现在为止,你已经亲手编译并运行了一个完整的Linux根文件系统。虽然它很小,但五脏俱全。后面的章节,我们会在这个基础上,添加更多功能,比如网络服务、文件系统扩展、自定义应用等等。
记住这个感觉——从零到一,最难的一步你已经跨过去了。