2. 源码获取与编译环境搭建
好,咱们正式开始动手了。这一章我带你搞定两件事:拿到BusyBox源码和搭好交叉编译环境。说白了,就是先把食材买回来,再把灶台支起来。
我记得刚入行那会儿,光配环境就折腾了两天。后来发现,其实就三步:下载、装工具链、设环境变量。别怕,跟着我来,半小时搞定。
2.1 从官网下载BusyBox源码
BusyBox的官方大本营在 busybox.net。我个人习惯直接去 https://busybox.net/downloads/ 这个页面,所有版本都在那儿躺着。
选版本有个小讲究:别追新。我建议用最新的稳定版,比如 1.36.x 系列。为什么?新版本可能有些坑还没填平,我在项目里吃过这个亏——用了个RC版,结果某个命令行为异常,查了两天bug才发现是版本问题。
下载命令很简单:
# 下载源码包
wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2
# 解压
tar -xjf busybox-1.36.1.tar.bz2
# 进入目录
cd busybox-1.36.1/
解压完你会看到一堆文件和目录。别慌,核心就这几个:
| 文件/目录 | 作用 |
|---|---|
Makefile |
编译的入口,所有构建逻辑都在这儿 |
Config.in |
配置菜单的模板,类似内核的Kconfig |
applets/ |
各个命令的源码,ls、cp、cat都在里面 |
include/ |
头文件,定义了一些公共结构和宏 |
libbb/ |
BusyBox自己的基础库,很多命令都依赖它 |
2.2 安装交叉编译工具链
交叉编译,说白了就是在PC上编译出能在ARM板子上跑的程序。你想想看,你的开发板可能是个ARM Cortex-A7,而你的电脑是x86架构,不用交叉编译工具链,编译出来的东西根本跑不起来。
工具链的选择很多,我列几个常用的:
- Linaro GCC:ARM官方推荐的,稳定可靠。我大部分项目都用它。
- Buildroot生成的工具链:如果你用Buildroot做根文件系统,它会顺带生成工具链。
- 芯片厂商提供的SDK:比如NXP、TI、全志都会提供自己的工具链。嗯,这里要注意,厂商的SDK有时候会魔改一些东西,兼容性最好但版本可能偏老。
我个人习惯用Linaro的,下载安装很简单:
# 下载ARM GCC(以arm-linux-gnueabihf为例)
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
# 解压到/opt目录
sudo tar -xJf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz -C /opt/
# 重命名一下,方便管理
sudo mv /opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf /opt/gcc-arm
sudo apt install gcc-arm-linux-gnueabihf。但版本可能不是最新的,适合快速验证。
2.3 配置环境变量
工具链装好了,但系统还不知道它在哪儿。你得告诉系统:嘿,编译ARM程序的时候,去这个目录找编译器。
环境变量配置的核心就两个:
PATH:把工具链的bin目录加进去,这样你敲arm-linux-gnueabihf-gcc就能找到。CROSS_COMPILE:告诉BusyBox用什么前缀的编译器。比如前缀是arm-linux-gnueabihf-,那编译器就是arm-linux-gnueabihf-gcc。
我建议把配置写到 ~/.bashrc 里,这样每次打开终端自动生效:
# 编辑.bashrc
vim ~/.bashrc
# 在文件末尾添加以下内容
export PATH=/opt/gcc-arm/bin:$PATH
export CROSS_COMPILE=arm-linux-gnueabihf-
export ARCH=arm
# 保存退出后,使配置生效
source ~/.bashrc
验证一下是否配置成功:
# 查看编译器版本
arm-linux-gnueabihf-gcc --version
# 如果能正常输出版本信息,说明环境搭好了
# 输出示例:
# arm-linux-gnueabihf-gcc (Linaro GCC 7.5.0-2019.12) 7.5.0
source ~/.bashrc 也没执行。所以配置完一定要记得 source 一下,或者新开一个终端窗口。
2.4 验证编译环境
环境搭好了,咱们跑个简单的测试,确保一切正常。进入BusyBox源码目录,执行:
# 先看看默认配置
make defconfig
# 然后尝试编译(先别急着裁剪,就测一下能不能编译通过)
make -j4
如果一切顺利,你会看到编译过程刷刷刷地跑,最后生成一个 busybox 可执行文件。用 file 命令看看它的属性:
file busybox
# 输出应该是类似这样的:
# busybox: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, stripped
看到 ARM 字样了吗?这说明咱们编译出来的确实是ARM架构的程序。把这个文件拷到你的开发板上,就能跑了。
- BusyBox源码从官网下载,推荐用稳定版
- 交叉编译工具链用Linaro GCC,稳定且社区活跃
- 环境变量配置PATH和CROSS_COMPILE,写入.bashrc持久化
- 用
make defconfig && make验证环境是否正常
嗯,到这里,咱们的编译环境就搭好了。下一节我会带你深入BusyBox的配置菜单,看看怎么裁剪出最适合你项目的工具箱。不过在那之前,我建议你先自己动手走一遍上面的流程。纸上得来终觉浅,对吧?
可可精品资料库