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

好,咱们正式开始动手了。这一章的目标很简单:把Buildroot的环境搭起来,然后看看它肚子里到底装了些什么。我见过不少新手,一上来就急着make,结果报错一堆,心态直接崩了。其实只要把依赖装好、源码下对,后面就顺了。

2.1 安装依赖包:别让“缺库”卡住你

Ubuntu 22.04是个不错的起点。我个人习惯用最小化安装,然后手动补依赖。Buildroot对宿主机的依赖不算多,但有几个关键包必须装。

打开终端,直接跑下面这条命令:

sudo apt update
sudo apt install -y \
    build-essential \
    libncurses-dev \
    bison flex \
    libssl-dev \
    libelf-dev \
    bc \
    cpio \
    unzip \
    rsync \
    file \
    wget \
    git

嗯,这里要注意:libncurses-dev 是图形化配置界面的基础,少了它你跑不了 make menuconfiglibssl-devlibelf-dev 是编译内核时用的,我遇到过有人没装这两个,编译到一半报错,回头再装又得重来,浪费时间。

小提示: 如果你用的是WSL2或者Docker环境,记得确认网络能正常访问外网。Buildroot在下载源码包时会从各大镜像站拉文件,网络不通会卡在“Downloading”那一步。

2.2 下载Buildroot源码:选对版本很重要

Buildroot的源码托管在GitHub上,也有官方镜像。我个人建议用LTS版本,稳定、文档全。2024年最新的LTS是2023.02.x系列,但咱们教程里用最新的稳定版就行。

下载方式有两种:

  1. 直接下载压缩包:去 https://buildroot.org/downloads/ 找到 buildroot-2023.02.12.tar.gz(具体版本号以实际为准),然后解压。
  2. 用Git克隆:如果你想跟踪最新提交,可以用Git。但我建议新手用第一种,省事。

我一般这么干:

wget https://buildroot.org/downloads/buildroot-2023.02.12.tar.gz
tar -xzf buildroot-2023.02.12.tar.gz
cd buildroot-2023.02.12

解压后,你会看到一个 buildroot-2023.02.12 的目录。咱们后面所有操作都在这个目录里进行。

注意: 不要用root用户直接操作Buildroot目录。我曾经因为权限问题,导致编译出来的文件无法被普通用户访问,折腾了半天。建议用普通用户,必要时加sudo。

2.3 目录结构:Buildroot的“五脏六腑”

好,现在咱们进到目录里,看看里面都有啥。用 ls -l 看一眼:

drwxr-xr-x  arch/        # 架构相关配置
drwxr-xr-x  board/       # 板级支持包
drwxr-xr-x  boot/        # 引导加载程序
drwxr-xr-x  configs/     # 默认配置文件
drwxr-xr-x  dl/          # 下载的源码包缓存
drwxr-xr-x  docs/        # 文档
drwxr-xr-x  fs/          # 文件系统生成
drwxr-xr-x  linux/       # Linux内核相关
drwxr-xr-x  output/      # 编译输出目录
drwxr-xr-x  package/     # 软件包定义
drwxr-xr-x  support/     # 辅助脚本
drwxr-xr-x  toolchain/   # 工具链相关
-rw-r--r--  Makefile     # 主Makefile

这里面有几个目录,你以后会天天打交道:

目录 作用 我的经验
dl/ 存放从网上下载的所有源码包(tar.gz等) 我第一次编译时,网络断了,结果所有包都得重下。后来我学会了把 dl/ 目录备份,换机器时直接拷过去,省流量。
output/ 编译产物:内核、根文件系统、工具链等 这个目录会越来越大,我一般用 make clean 清理,但不会删 dl/
board/ 板级配置:设备树、分区表、启动脚本等 如果你要支持一块新板子,这里就是你的主战场。
configs/ 预置的配置文件(比如 raspberrypi3_defconfig 我经常用 make list-defconfigs 看看有哪些现成的配置,省得从头配。
package/ 所有软件包的构建规则(.mk文件) 想加个新软件?就在这里写个 .mk 文件。

为了让你更直观地理解这些目录之间的关系,我画了一张图:

Buildroot 核心目录结构及数据流 Buildroot 根目录 configs/ 默认配置文件 board/ 板级支持包 package/ 软件包定义 dl/ 源码包缓存 output/ 编译输出 output/ 内部结构 ├── build/ (编译临时文件) ├── host/ (主机工具) ├── staging/ (目标系统头文件/库) ├── target/ (根文件系统) └── images/ (最终镜像) 下载 编译 配置影响 构建规则 配置/定义目录 运行时目录 output内部

你看,configs/board/ 是“输入”,告诉Buildroot你要什么;dl/ 是“仓库”,存着原材料;output/ 是“工厂”,产出最终产品。这个流程搞清楚了,后面遇到问题你就能快速定位。

2.4 验证环境:跑个简单的配置试试

环境搭好了,咱们验证一下。先看看能不能进入配置界面:

make menuconfig

如果一切正常,你会看到一个蓝底白字的图形界面。这说明依赖包都装对了。如果报错说 ncurses 找不到,那就回头检查一下 libncurses-dev 装了没。

我个人习惯在第一次运行 make menuconfig 之前,先跑一下 make defconfig 生成一个默认配置,这样能避免一些选项没选导致的编译错误。你可以试试:

make defconfig
make menuconfig

看到配置界面后,随便浏览一下,然后按 Exit 退出,选择保存。这样你的 .config 文件就生成了。

核心要点: 环境准备阶段,最重要的是把 dl/output/ 这两个目录搞清楚。前者是“缓存”,后者是“产物”。我建议你把 dl/ 目录单独备份,以后换机器或者重装系统,直接拷过来,能省下大量下载时间。

好了,环境准备好了,目录结构也摸清了。下一章咱们就开始真正配置一个项目,选目标板、配内核、加软件包。到时候你会发现,Buildroot其实没那么神秘。


专注资料整理