2. 环境准备:搭建交叉编译环境、下载BusyBox源码、安装必要的依赖库

好,咱们正式开始动手了。这一章,说白了就是「把工具备齐」。

我见过不少新手,一上来就急着编译内核、搞文件系统,结果环境没配好,卡在某个莫名其妙的报错上,一查就是半天。嗯,这种坑,我踩过不止一次。所以这一章,咱们稳扎稳打,把交叉编译环境、源码、依赖库,一步到位搞定。

2.1 交叉编译环境:为什么需要它?

你想想看,你的开发电脑是 x86 架构,但目标板(比如 ARM 开发板)是 ARM 架构。x86 上编译出来的程序,ARM 板子根本跑不了。怎么办?

交叉编译器就是干这个的。它在你的 x86 电脑上运行,但生成的目标代码是 ARM 格式的。说白了,就是「跨架构编译」。

我个人习惯用 gcc-arm-linux-gnueabihf 这个工具链。它支持硬浮点,性能好,而且社区活跃,遇到问题好搜。

核心要点: 交叉编译工具链的命名规则通常是 arch-vendor-os-abi。比如 arm-linux-gnueabihf,arm 是架构,linux 是操作系统,gnueabihf 是 C 库和浮点类型。

2.2 安装交叉编译工具链

我推荐两种方式,你根据自己情况选一种就行。

方式一:apt 直接安装(推荐,省心)

如果你用的是 Ubuntu 或 Debian,直接一行命令搞定:

sudo apt update
sudo apt install gcc-arm-linux-gnueabihf binutils-arm-linux-gnueabihf

装完之后,验证一下:

arm-linux-gnueabihf-gcc --version

能看到版本号,就说明装好了。我在项目中经常用这种方式,快,而且不会出现依赖地狱。

方式二:Linaro 官方下载(适合需要特定版本)

有时候项目要求特定的 GCC 版本,比如 7.5 或 9.2。这时候我会去 Linaro 官网下载预编译包。

wget https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
tar -xf gcc-linaro-*.tar.xz
export PATH=$PATH:$(pwd)/gcc-linaro-*/bin

记得把 export 这行加到 ~/.bashrc 里,不然每次开终端都要重新设置。

注意: 我曾经遇到过 PATH 环境变量冲突的问题。如果你之前装过其他交叉编译器,建议先 echo $PATH 检查一下,避免多个工具链互相干扰。

2.3 下载 BusyBox 源码

BusyBox 的源码托管在 git.busybox.net。我个人习惯用 Git 克隆,这样以后可以方便地切换分支、查看历史。

git clone git://git.busybox.net/busybox
cd busybox
git checkout 1_36_1  # 我习惯用稳定版,1.36.1 是目前比较成熟的版本

如果你不想装 Git,也可以直接下载压缩包:

wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2
tar -jxf busybox-1.36.1.tar.bz2
cd busybox-1.36.1

源码目录结构很清晰:applets/ 放的是各个小工具的实现,libbb/ 是公共库,include/ 是头文件。你以后定制的时候,主要会跟 applets/ 和 Config.in 打交道。

2.4 安装必要的依赖库

编译 BusyBox 本身依赖不多,但为了后续能顺利编译内核模块、或者调试,我建议一次性装齐。

依赖库/工具 用途 安装命令
build-essential 基础编译工具(gcc, make 等) sudo apt install build-essential
libncurses-dev menuconfig 图形界面依赖 sudo apt install libncurses-dev
flex, bison 词法/语法分析器(部分配置需要) sudo apt install flex bison
bc 计算器(内核编译有时需要) sudo apt install bc
cpio 制作 initramfs 镜像 sudo apt install cpio

装完之后,你可以跑一下 make defconfig 试试,看看会不会报错。如果顺利通过,说明环境基本就绪了。

小技巧: 我个人习惯在 ~/.bashrc 里加一个别名:alias arm-gcc='arm-linux-gnueabihf-gcc',这样每次敲命令能少打几个字。你试试看,很爽。

2.5 本章知识体系总览

下面这张图,帮你把这一章的核心逻辑串起来。从宿主机到目标板,中间经历了什么,一目了然。

环境准备核心流程 宿主机 (x86) 交叉编译工具链 BusyBox 源码 依赖库/工具 编译输出 (ARM 二进制) 目标板 (ARM) → 直接依赖 - - - 间接依赖

嗯,环境准备这块,其实不难,但容易出小问题。我建议你装完之后,花 5 分钟跑一遍 make defconfig 和 make,看看能不能顺利编译通过。如果卡住了,别慌,多半是某个依赖没装全,回头检查一下表格里的包就行。

好,环境就绪,下一章咱们开始真正配置 BusyBox。

可可精品资料库