第1章:环境准备——在Ubuntu上搭建Buildroot开发环境

大家好,我是老李。做嵌入式Linux开发这些年,我踩过最多的坑,就是环境没配好就开始干活。你想想看,代码写得再漂亮,编译不过去,那都是白搭。所以这一章,咱们先把地基打牢。

Buildroot这个工具,说白了就是一个自动化构建系统。它能帮你从零开始,生成一个完整的嵌入式Linux系统——包括交叉编译工具链、根文件系统、内核、bootloader,一条龙搞定。但前提是,你的开发环境得先准备好。

核心要点:Buildroot本身不挑Ubuntu版本,但依赖包必须装全。缺一个,编译就可能卡在某个奇怪的地方。

1.1 我推荐的Ubuntu版本

我个人习惯用Ubuntu 20.04 LTS或22.04 LTS。为什么?因为这两个版本稳定,社区支持好,而且Buildroot官方CI测试主要就是在这两个版本上跑的。

如果你用的是Ubuntu 18.04,也能用,但有些依赖包需要手动装。Ubuntu 24.04我也试过,目前兼容性还行,但个别老版本Buildroot可能会有小问题。

Ubuntu版本 推荐度 备注
20.04 LTS ⭐⭐⭐⭐⭐ 最稳定,社区支持最好
22.04 LTS ⭐⭐⭐⭐⭐ 新一些,依赖包版本更新
24.04 LTS ⭐⭐⭐⭐ 可用,但建议用Buildroot 2024.02以上版本
18.04 LTS ⭐⭐⭐ 需要手动补充一些依赖

1.2 安装必要依赖包

嗯,这里要注意。Buildroot的依赖包分两类:一类是必须装的,少了它编译直接报错;另一类是建议装的,不装也能用,但某些功能会受限。

先上命令,咱们一次性装完:

sudo apt update
sudo apt install -y \
    git \
    wget \
    curl \
    make \
    gcc \
    g++ \
    gperf \
    bison \
    flex \
    texinfo \
    help2man \
    unzip \
    libtool \
    libtool-bin \
    automake \
    autoconf \
    libncurses5-dev \
    libncursesw5-dev \
    python3 \
    python3-pip \
    python3-venv \
    rsync \
    file \
    cpio \
    bc \
    patch \
    diffutils \
    build-essential \
    libssl-dev \
    libelf-dev \
    device-tree-compiler

这条命令我几乎每搭一个新环境都要跑一遍。你可能会问:「这么多包,每个都是干嘛的?」别急,我挑几个重点说说。

1.3 关键依赖包解读

build-essential:这个包组包含了gcc、g++、make等基础编译工具。没有它,你连hello world都编译不了。

libncurses5-dev / libncursesw5-dev:Buildroot的menuconfig配置界面依赖这个。我曾经有一次忘了装,结果make menuconfig报错,折腾了半天才发现是缺了这个。

libssl-dev / libelf-dev:编译内核和某些第三方包时需要。特别是现在很多包都要求HTTPS下载,libssl-dev几乎是必装的。

device-tree-compiler:设备树编译器。做嵌入式Linux开发,设备树是绕不开的。这个包很小,但很重要。

小技巧:如果你不确定某个包是否已安装,可以用 dpkg -l | grep 包名 来检查。比如 dpkg -l | grep libssl-dev

1.4 验证环境是否就绪

装完依赖后,我建议你做个快速验证。别等到编译到一半才发现有问题,那太浪费时间了。

# 检查gcc版本
gcc --version

# 检查make版本
make --version

# 检查python3版本
python3 --version

# 检查git版本
git --version

输出应该类似这样:

gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
GNU Make 4.2.1
Python 3.8.10
git version 2.25.1

版本号不用完全一致,只要不是太老就行。比如gcc 4.x就有点过时了,建议升级。

1.5 下载Buildroot源码

环境配好了,接下来就是下载Buildroot本身。我个人习惯用git clone,这样以后切换版本、查看历史都很方便。

# 创建一个工作目录
mkdir -p ~/buildroot_workspace
cd ~/buildroot_workspace

# 克隆Buildroot官方仓库
git clone https://git.buildroot.net/buildroot

# 进入目录
cd buildroot

# 查看所有可用版本
git tag -l | head -20

你会看到类似这样的输出:

2024.02
2024.02.1
2024.02.2
2024.05
2024.05.1
2024.08
...

我建议新手从最新的稳定版开始。比如现在最新的是2024.08,那就用这个:

git checkout 2024.08

注意:不要用master分支。master是开发分支,可能随时有变动,不稳定。咱们做项目,稳定第一。

1.6 第一次编译测试

下载完源码后,我建议你跑一次快速编译测试,确认环境真的没问题。咱们选一个最简单的配置——qemu_x86_64_defconfig,这个配置不需要真实硬件,用QEMU就能跑。

# 配置
make qemu_x86_64_defconfig

# 开始编译(-j后面跟CPU核心数,比如4核就写-j4)
make -j$(nproc)

第一次编译会比较慢,因为要下载很多源码包。Buildroot会自动下载、解压、打补丁、编译,整个过程全自动。你只需要泡杯咖啡等着就行。

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

>>>   Generating root filesystem image
>>>   Generating images
>>>   Done

生成的镜像文件在 output/images/ 目录下。用QEMU可以启动它:

# 启动测试
qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,format=raw -append "root=/dev/sda" -nographic

看到登录提示符,说明你的环境完全OK了。

1.7 避坑指南

我遇到过不少新手在环境准备阶段卡住,这里列几个常见问题:

  • 「Permission denied」错误:多半是当前用户没有写权限。建议用普通用户操作,不要用root。如果遇到权限问题,检查目录权限,而不是直接sudo make。
  • 「Package not found」错误:依赖包没装全。回头检查一下1.2节的命令,确保所有包都装上了。
  • 「Download failed」错误:网络问题。Buildroot需要从网上拉取源码包,如果网络不稳定,可以配置国内镜像源。在menuconfig中设置 BR2_BACKUP_SITE 为清华或中科大的镜像。
  • 「Out of memory」错误:编译时内存不够。特别是用 -j$(nproc) 时,如果虚拟机内存只有2GB,建议改成 -j2-j1

我的经验:如果你用的是虚拟机,建议分配至少4GB内存和2个CPU核心。磁盘空间预留20GB以上。Buildroot编译过程中会下载大量源码包,加上编译产物,空间消耗不小。

1.8 本章知识体系

为了让你更直观地理解本章的内容,我画了一张流程图:

Buildroot环境准备流程 选择Ubuntu版本 推荐20.04/22.04 LTS 安装依赖包 apt install 一键安装 验证环境 检查gcc/make版本 下载源码 git clone 编译测试? 失败 检查依赖 成功 环境就绪 整个流程大约需要30分钟(取决于网络速度) 关键检查点: ① 依赖包是否装全 ② 网络是否通畅 ③ 磁盘空间是否充足 ④ 是否使用稳定版tag

这张图把整个环境准备的流程串起来了。从选择Ubuntu版本开始,到安装依赖、验证环境、下载源码,最后做一次编译测试。如果测试失败,就回到依赖检查环节;如果成功,恭喜你,环境就绪了。

1.9 小结

这一章的内容其实不多,但很重要。我见过太多人一上来就急着编译,结果缺这个少那个,折腾半天。你想想看,如果连环境都没配好,后面的学习怎么进行?

我个人建议,花点时间把这一步做扎实。依赖包装全,源码下载好,编译测试跑通。这样后面学配置、学定制、学调试的时候,你才能把精力放在真正重要的地方。

好了,环境准备好了。接下来你就可以开始探索Buildroot的配置世界了。


专注资料整理