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 里,不然每次开终端都要重新设置。
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 本章知识体系总览
下面这张图,帮你把这一章的核心逻辑串起来。从宿主机到目标板,中间经历了什么,一目了然。
嗯,环境准备这块,其实不难,但容易出小问题。我建议你装完之后,花 5 分钟跑一遍 make defconfig 和 make,看看能不能顺利编译通过。如果卡住了,别慌,多半是某个依赖没装全,回头检查一下表格里的包就行。
好,环境就绪,下一章咱们开始真正配置 BusyBox。