第2章:环境准备:在Ubuntu上安装Buildroot依赖包,下载源码,了解目录结构

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

这一章说白了就是「磨刀不误砍柴工」。你想想看,如果连环境都没搭好,后面编译到一半报个依赖缺失,那才叫崩溃。我刚开始用Buildroot时就吃过这个亏——装了个最小化Ubuntu,结果make到80%突然停了,提示缺这缺那,查了半天才发现是少了几个基础库。

所以,咱们一步到位,把环境整利索。

2.1 安装Buildroot依赖包

Buildroot本质上是一个构建系统,它需要调用你主机上的各种工具。比如编译器、解析器、打包工具等等。Ubuntu 20.04/22.04 LTS是我个人最推荐的主机系统,稳定,包也全。

打开终端,执行下面这条命令:

sudo apt update
sudo apt install -y \
    git \
    make \
    gcc \
    g++ \
    libncurses5-dev \
    libncursesw5-dev \
    flex \
    bison \
    bc \
    cpio \
    rsync \
    unzip \
    wget \
    file \
    python3 \
    python3-pip \
    python3-venv \
    libssl-dev \
    libelf-dev \
    u-boot-tools \
    device-tree-compiler \
    swig \
    libtool \
    autoconf \
    automake \
    pkg-config \
    gettext \
    texinfo \
    patch \
    diffutils \
    gawk \
    sed \
    grep \
    tar \
    gzip \
    bzip2 \
    xz-utils \
    lz4 \
    zstd \
    cmake \
    meson \
    ninja-build
我的小建议: 如果你用的是Ubuntu 22.04,记得确认一下python3版本是3.10以上。Buildroot 2023.x系列对Python 3.8以下的支持已经不太好了。我去年帮一个学员排查问题,折腾了两小时,最后发现是他Ubuntu 18.04自带的Python 3.6不兼容。

装完之后,验证一下关键工具:

gcc --version
make --version
git --version
python3 --version

嗯,看到版本号输出,基本就没问题了。

2.2 下载Buildroot源码

我个人习惯用Git克隆官方仓库。这样以后想切版本、看提交历史都很方便。

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

克隆完成后,你会看到当前目录下有一个 Makefile 文件。这就是Buildroot的入口。

如果你想用某个稳定版本(比如2023.11),可以切到对应的tag:

git tag -l '2023.11*'
git checkout 2023.11
注意: 我曾经遇到过直接clone master分支,结果编译到一半发现某个包的新版本有bug。所以,做产品的话,建议用LTS版本。开发学习的话,master也行,但要有心理准备。

2.3 了解Buildroot目录结构

好,源码下载完了。咱们来看看里面都有什么。我当初第一次打开这个目录时,说实话有点懵——文件夹太多了。但别怕,核心的就那么几个。

下面这张图是我自己整理的Buildroot核心目录结构,你一看就明白:

buildroot/ arch/ board/ configs/ dl/ fs/ linux/ package/ support/ system/ toolchain/ utils/ output/ CPU架构配置 板级支持包 默认配置 下载缓存 文件系统 内核配置 软件包 辅助工具 系统默认配置 工具链 实用脚本 编译输出 核心目录速记口诀 arch/board/configs —— 硬件相关 package/linux/fs —— 软件相关 output/dl —— 编译产物

咱们挑几个重点目录说说:

目录 作用 我的经验
arch/ 存放不同CPU架构的配置,比如ARM、x86、RISC-V 做ARM板子时经常来这里看cache line大小
board/ 板级支持包,包含设备树、分区表、启动脚本 这是你定制板子的主战场
configs/ 预置的defconfig文件,比如树莓派、BeagleBone 我一般从这里copy一份再改
package/ 所有软件包的构建规则,每个包一个子目录 想加新软件?就在这里加
dl/ 下载的源码包缓存,避免重复下载 这个目录可以备份,重装系统后直接拷回来
output/ 编译产物,包括镜像、根文件系统、工具链 make clean不会删这个,得make distclean

重点记住: output/images/ 里面就是你最终要的镜像文件。比如 rootfs.tar、zImage、u-boot.bin。我每次编译完第一件事就是去这个目录看看文件大小对不对。

2.4 验证环境是否就绪

最后一步,咱们跑一个简单的测试,确保Buildroot能正常启动配置界面:

make list-defconfigs | head -20

如果能看到一长串的板子名称列表,比如 raspberrypi4_64_defconfig、beaglebone_defconfig 这些,说明环境已经OK了。

一个小技巧: 如果你在公司内网,下载源码可能会很慢。可以设置 BR2_DL_DIR 环境变量指向一个共享目录,团队共用缓存。我在团队里就是这么干的,编译时间从40分钟降到了15分钟。

好了,环境准备好了,源码也下载了,目录结构也摸清了。接下来就可以真正开始配置我们的第一个Buildroot项目了。


可可精品资料库