2、环境搭建:在Ubuntu上安装Buildroot依赖、下载Buildroot源码、首次编译体验。

好,咱们正式开始动手了。这一章的目标很明确:在你的Ubuntu机器上,把Buildroot的环境支棱起来。说白了,就是装好依赖、拉下源码、然后跑一次编译,看看它到底能不能吐出个根文件系统来。

我刚开始接触Buildroot的时候,其实挺忐忑的。心想这玩意儿会不会很复杂?结果第一次编译成功,看到终端里刷出那个小小的rootfs.tar.gz,心里踏实多了。嗯,咱们一步步来。

2.1 安装Buildroot依赖

Buildroot本身是个构建系统,它不负责编译代码——它得调用你系统里的工具链。所以,你得先把这些“幕后英雄”请进来。

我个人习惯用apt一把梭。打开终端,执行下面这条命令:

sudo apt update
sudo apt install -y \
    build-essential \
    libncurses-dev \
    bison \
    flex \
    gettext \
    texinfo \
    wget \
    cpio \
    unzip \
    file \
    rsync \
    bc \
    python3 \
    python3-pip \
    git \
    curl

这里我挑几个重点说一下:

  • build-essential:包含了gcc、g++、make这些基础编译工具。没有它,你连个hello world都编译不了。
  • libncurses-dev:这是用来支持make menuconfig图形化配置界面的。你想想看,没有它,你就只能对着黑乎乎的终端敲配置了,那得多痛苦。
  • bison、flex:这两个是语法分析器和词法分析器。Buildroot在配置过程中会用到它们来解析一些配置文件。
  • git:用来拉取Buildroot源码。当然你也可以直接下载压缩包,但我建议用git,方便以后更新和切换版本。
小提示: 如果你用的是Ubuntu 20.04或更早版本,可能还需要手动安装python2。不过现在主流都用Python3了,上面那条命令已经包含了。

我曾经在某个项目里,因为漏装了libncurses-dev,结果执行make menuconfig时直接报错,提示找不到ncurses.h。当时我还纳闷呢,明明gcc都装了啊。后来一查,原来是这个库没装。嗯,这种坑踩过一次就记住了。

2.2 下载Buildroot源码

依赖装好了,接下来就是拉源码。我个人推荐用git clone,这样以后想切分支、看历史都方便。

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

如果你想用某个稳定版本,比如2024.02.x,可以切到对应的分支:

git checkout 2024.02.x

当然,你也可以直接从官网下载tar包。但我还是那句话:用git吧,省心。你想想看,万一你编译到一半发现某个bug,想回退到上一个版本,git checkout一下就搞定了。要是tar包,你还得重新下载解压,多麻烦。

注意: 下载路径不要包含中文或空格。Buildroot对路径比较敏感,我曾经因为把源码放在“我的项目”文件夹下,结果编译时各种奇葩错误。后来老老实实放到~/buildroot下,一切正常。

2.3 首次编译体验

源码拉下来了,咱们先别急着改配置。Buildroot默认带了一堆现成的配置模板,咱们先挑一个最简单的试试水。

我个人建议用qemu_x86_64_defconfig,因为QEMU模拟器在Ubuntu上很好装,而且不需要真实硬件。你可以在虚拟机里直接跑起来。

make qemu_x86_64_defconfig

这条命令会生成一个.config文件,里面包含了所有默认配置。你可以用make menuconfig进去看看,但第一次嘛,咱们先不动它,直接编译:

make

然后,就是漫长的等待了。Buildroot会从网上下载各种源码包,然后交叉编译。第一次编译时间会比较长,取决于你的网络和机器性能。我自己的笔记本大概要20-30分钟。

编译过程中,你会看到终端里刷刷地刷屏。别慌,这是正常的。如果遇到错误,它会停下来并提示。常见的错误有:

  • 网络问题:下载源码包失败。可以换个时间再试,或者手动下载放到dl/目录下。
  • 磁盘空间不足:Buildroot编译过程中会占用不少空间,建议至少留出10GB空闲。
  • 依赖缺失:如果前面依赖没装全,这里会报错。回头检查一下。
避坑指南: 我曾经在编译到一半时,因为网络断了,导致某个包下载失败。结果整个编译过程卡在那里,进退两难。后来我学乖了,先手动把dl/目录下的包都下载好,再开始编译。或者,你可以用make -j4来并行编译,但第一次建议单线程,方便看错误信息。

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

>>>   Generating root filesystem image
...
>>>   Generating root filesystem tarball
...
>>>   Done

然后,在output/images/目录下,你会看到生成的文件:

文件 说明
rootfs.cpio 根文件系统镜像(cpio格式)
rootfs.tar 根文件系统压缩包
bzImage Linux内核镜像
start-qemu.sh 启动QEMU的脚本

你可以直接用./start-qemu.sh来启动QEMU,看看你编译出来的系统长什么样。我第一次看到那个小小的Linux系统在QEMU里跑起来时,说实话,挺有成就感的。

小技巧: 如果你不想每次都从头编译,可以试试make clean只清理编译产物,保留配置和下载的源码包。下次再make时,它会跳过下载和配置阶段,直接编译,快很多。

嗯,到这里,你的Buildroot环境就搭建好了。第一次编译可能有点慢,但别急,后面咱们会慢慢优化。下一章,咱们会深入看看make menuconfig,把那些配置项一个个讲清楚。