[Busybox](https://busybox.net) 提供了很多 Linux 命令的轻量实现。现在,我要为 ARM64 架构的 Android 设备编译 Busybox 。 解压好 Busybox 源代码,安装交叉编译工具链,开始编译。 # 安装工具 以用 Debian Buster 给 aarch64 架构编译 Busybox 为例,先安装 `g++-aarch64-linux-gnu` 和 `build-essential` 。`gcc` 也会自动被安装。 ```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_COMPILE` 为 `aarch64-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 就出现了。