嵌入式Linux快速入门系统教程(二):用 Buildroot 构建 Linux 系统

立芯嵌入式 2025-07-13 10:00

嵌入式 Linux 开发中,从源码构建一个系统并让它在硬件上跑起来,是最让人兴奋的时刻。这篇文章将带你一步步完成这个过程,以树莓派为目标硬件,使用 Buildroot 工具链打造一个高度定制的 Linux 系统镜像。这不仅是一篇技术分享,更是一个实操教程,让你真正感受到嵌入式开发的乐趣。无论你是用实体树莓派还是虚拟机,都能跟着本文把系统跑起来!


准备工作:开发环境与硬件

在动手之前,确保你已经准备好以下内容:

  1. 开发主机:需要一台运行 Linux 的主机,推荐 Ubuntu,简单易用。如果没有 Linux 环境,可以用虚拟机代替,但要确保虚拟机分配了足够资源(至少 15GB 磁盘空间和多核 CPU)。虚拟机虽方便,但编译速度可能会慢一些,做好心理准备。
  2. 硬件(可选):如果你选择用树莓派(比如 Zero W 或 Zero),需要准备一块 SD 卡和一个 FT2232 串口适配器,用于连接串口控制台。如果不想买硬件,虚拟机也能完成实验,我会在文中提供两种方案的指引。
  3. 时间:整个过程需要 2-4 小时,包括编译和调试。嵌入式开发是个慢工出细活的过程,边学边玩,别急。
  4. Linux 基础:熟悉基本的 shell 操作,比如 cdls 这些命令。嵌入式开发不要求你是 Linux 大神,但会用终端是必须的。
  5. 磁盘空间:至少 15GB 空闲空间。编译整个系统镜像虽然最终产物很小,但中间过程会占用不少空间。

准备好这些,咱们就开干!


Buildroot:嵌入式开发的得力助手

Buildroot 是一个专门为嵌入式系统设计的工具链,功能强大又简单易用。它能自动化完成从源码下载到系统镜像生成的全流程,我们可以专注于更有趣的定制工作。相比其他复杂的构建工具,Buildroot 的哲学是 小而美,生成的镜像精简高效。

buildroot工作流程
buildroot工作流程

接下来,我们将通过几个简单步骤,用 Buildroot 给树莓派构建一个 Linux 系统镜像,整个过程只需要 六条命令

详细构建过程
详细构建过程

六步构建系统镜像

1. 安装主机工具

首先,需要安装一些 Buildroot 依赖的工具,包括 Git、编译器和一些辅助工具。这些工具是 Buildroot 启动编译的必需品。

在 Ubuntu 上,运行以下命令:

sudo apt install -y git build-essential wget cpio unzip rsync bc libncurses5-dev screen

这条命令会安装 Git(用于下载 Buildroot 源码)、编译器(用于构建交叉编译工具链)、以及 screen(用于串口调试)。如果是其他 Linux 发行版,命令可能略有不同,比如 CentOS 用 yum 或 dnf,但核心工具包一致。如果遇到问题,建议查阅 Buildroot 官网的依赖列表。

2. 下载 Buildroot 源码

Buildroot 提供多种获取源码的方式,但最方便的是通过 Git 克隆:

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

这会把 Buildroot 的源码仓库下载到本地。进入 buildroot 目录后,我们需要切换到特定版本,这里用 2019.11.1(截至 2020 年 1 月的最新稳定版):

git checkout 2019.11.1

Git 可能会提示你处于 分离 HEAD 状态,别慌,这是正常现象,说明我们正在使用一个具体的版本标签,而不是某个分支。

3. 配置 Buildroot

Buildroot 提供了针对不同硬件的预置配置文件(defconfig),我们需要根据目标硬件选择合适的配置。对于树莓派 Zero W,运行:

make raspberrypi0w_defconfig

如果是树莓派 Zero 或虚拟机,分别用以下命令:

  • 树莓派 Zero:make raspberrypi0_defconfig
  • 虚拟机:make qemu_x86_64_defconfig

这些配置文件位于 configs/ 目录下,定义了目标硬件的默认设置,比如内核版本、文件系统类型等。运行 make xxx_defconfig 后,Buildroot 会生成一个 .config 文件,记录所有配置选项。稍后如果需要调整配置,可以用 make menuconfig 打开图形化配置界面,类似 Linux 内核的配置方式。

4. 编译系统镜像

万事俱备,只欠编译!运行以下命令启动构建:

make

这一步会下载源码、构建交叉编译工具链、编译内核和根文件系统,最后生成 SD 卡镜像(或虚拟机镜像)。整个过程可能需要 2-3 小时,具体取决于你的电脑性能。编译期间需要联网,因为 Buildroot 会从网上下载各种软件包的源码。


Buildroot 工作原理

趁着编译的空档,我们来聊聊 Buildroot 是如何把一堆源码变成可运行的系统镜像的。理解这个过程,能帮你更好地定制系统。

编译流程概览

Buildroot 的核心工作可以分为以下几个阶段:

  1. 构建工具链:包括交叉编译器、链接器等,用于编译目标系统的软件。
  2. 下载源码:从网上获取内核、库和应用程序的源码。
  3. 编译与安装:根据配置,解压源码、打补丁、编译并安装到目标根文件系统目录(output/target/)。
  4. 添加配置文件:将设备特定的配置文件复制到根文件系统中。
  5. 生成镜像:将根文件系统打包成最终的固件镜像,比如 SD 卡镜像。

这些步骤看似复杂,但 Buildroot 通过脚本自动化完成,我们只需要关注配置和定制。

关键目录解析

Buildroot 源码树中有几个核心目录:

  • **board/**:存放目标硬件的特定支持文件和脚本。
  • **configs/**:存放预置配置文件,比如 raspberrypi0w_defconfig
  • **package/**:定义了所有软件包的编译规则,Buildroot 2019.11 包含 2289 个软件包,从 Nginx 到游戏引擎一应俱全。
  • **output/host/**:主机上运行的工具,比如交叉编译器。
  • **output/target/**:目标系统的根文件系统内容。
  • **output/images/**:最终生成的镜像文件,比如 SD 卡镜像。

软件包与配置

Buildroot 的软件包(package)是其核心概念,每个软件包定义了如何下载、编译和安装某个软件(比如 BusyBox 或 Linux 内核)。软件包的配置选项用 Kconfig 语言写在 Config.in 文件中,控制是否编译该软件包以及启用哪些功能。

通过 make menuconfig,你可以调整这些配置,比如添加一个 Web 服务器或禁用不需要的内核模块。配置文件最终保存在 .config 中,make 命令会根据这个文件计算依赖关系,自动按正确顺序编译所有软件包。


启动系统:点亮树莓派

编译完成后,output/images/ 目录下会生成一个 SD 卡镜像(sdcard.img),大小通常只有几十 MB,非常精简。接下来,我们将这个镜像烧录到 SD 卡并启动树莓派。如果用虚拟机,步骤会更简单。

烧录 SD 卡(树莓派)

  1. 确认 SD 卡设备名:插入 SD 卡,用 dmesg -w 查看内核日志,找到类似 /dev/mmcblk0 的设备名。注意,设备名可能因系统不同而变化,比如可能是 /dev/sdX。务必确认清楚,避免误操作覆盖主机硬盘!

  2. 烧录镜像

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

dd 命令会将镜像写入 SD 卡,sync 确保数据完全写入。完成后,安全弹出 SD 卡并插入树莓派。

连接串口(树莓派)

树莓派的串口通信需要 FT2232 适配器。连接方式如下:

  • 树莓派 GPIO 的 TXD(发送)连接到 FT2232 的 RXD(接收)。
  • 树莓派 GPIO 的 RXD(接收)连接到 FT2232 的 TXD(发送)。
  • 两者的 GND(地线)连接。

连接好后,将 FT2232 插入主机,用 dmesg -w 查看串口设备名,通常是 /dev/ttyUSB0 或 /dev/ttyUSB1

启动串口终端:

sudo screen -fn /dev/ttyUSBX 115200

这会以 115200 波特率打开串口控制台。退出 screen 时,按 Ctrl+a 后输入 \

启动虚拟机(虚拟机)

如果使用虚拟机,运行以下命令启动 QEMU 模拟器:

output/host/bin/qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append "rootwait root=/dev/vda" -net nic,model=virtio -net user

虚拟机启动很快,通常几秒钟就能看到登录提示。

登录系统

无论是树莓派还是虚拟机,启动后你会在串口终端或虚拟机窗口看到类似以下输出:

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.19.66 ...
...
Welcome to Buildroot!
buildroot login:

输入用户名 root(无密码),即可登录。试试 ls /usr/bin 查看系统有哪些命令行工具。如果成功登录,恭喜!你已经从源码构建并启动了一个嵌入式 Linux 系统!

声明:内容取材于网络,仅代表作者观点,如有内容违规问题,请联系处理。 
嵌入式
Copyright © 2025 成都科技区角科技有限公司
蜀ICP备2025143415号-1
  
川公网安备51015602001305号