Busybox 提供了很多 Linux 命令的轻量实现。现在,我要为 ARM64 架构的 Android 设备编译 Busybox 。

解压好 Busybox 源代码,安装交叉编译工具链,开始编译。

安装工具

以用 Debian Buster 给 aarch64 架构编译 Busybox 为例,先安装 g++-aarch64-linux-gnubuild-essentialgcc 也会自动被安装。

apt install g++-aarch64-linux-gnu build-essential

配置环境

这里用于交叉编译的 gcc 命令为 aarch64-linux-gnu-gcc ,而 Busybox 代码里的 Makefile 注释写道:

CROSS_COMPILE specify the prefix used for all executables used during compilation.
Only gcc and related bin-utils executables are prefixed with $(CROSS_COMPILE).
CROSS_COMPILE can be set on the command line make CROSS_COMPILE=ia64-linux-
Alternatively CROSS_COMPILE can be set in the environment.

所以我们只需要设定环境变量 CROSS_COMPILEaarch64-linux-gnu- ,就能让程序调用交叉编译工具链。

export CROSS_COMPILE=aarch64-linux-gnu-

之后是设定编译器标签:

export CFLAGS="-march=armv8-a+crypto+crc -static -pipe"

我的手机处理器架构是 armv8-a ,想为它专门优化就要用到 -march 标签。 -static 要求编译器使用静态链接库,免得 Android 与 GNU/Linux 上不同的函数库引起麻烦。(GNU/Linux 可能使用 glibc 或者 musl 函数库,但是 Android 使用 bionic)

开始编译

make defconfig && make ,等待片刻,编译好的 Busybox 就出现了。