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,方便以后更新和切换版本。
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下,一切正常。
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,把那些配置项一个个讲清楚。