BusyBox 中文文档 下载 App

make install 安装 BusyBox 生成符号链接

make install 做了什么

编译完成后执行 make install,它会完成三件事:

  1. 把编译好的 busybox 二进制复制到 CONFIG_PREFIX/bin/busybox
  2. 在 CONFIG_PREFIX/ 下为每个启用的 Applet 创建符号链接(指向 bin/busybox)
  3. 如果有 init Applet,创建指向 busybox 的 /sbin/init 符号链接
# 默认安装到源码目录下的 _install/
make install
# 产物:
#   _install/bin/busybox       ← 主二进制
#   _install/bin/ls            ← 符号链接 → busybox
#   _install/bin/cat           ← 符号链接 → busybox
#   _install/bin/sh            ← 符号链接 → busybox(ash)
#   _install/sbin/init         ← 符号链接 → busybox
#   _install/usr/bin/...       ← 其余 Applet 链接
#   _install/usr/sbin/...

CONFIG_PREFIX 选项

安装路径由 CONFIG_PREFIX 控制,有两种设置方式:

# 方式一:在 menuconfig 里设置
make menuconfig
# Build Options --> Destination path for 'make install' (CONFIG_PREFIX)

# 方式二:命令行覆盖(优先级更高)
make install CONFIG_PREFIX=/opt/myroot

CONFIG_PREFIX 默认值是 _install(源码目录下),生产环境通常指向目标根文件系统的临时构建目录。

符号链接 vs 硬链接

BusyBox 的符号链接生成方式也可以配置:

Build Options  --->
    [*] Create a busybox symlink (busybox -> busybox)
    [ ] Create symlinks to busybox
    [ ] Create hardlinks to busybox

嵌入式系统用符号链接最常见,因为硬链接跨文件系统不工作,而且某些闪存文件系统对硬链接支持不好。

手动安装到目标设备

如果不走 Buildroot/OpenWrt 的自动流程,手动把 BusyBox 部署到目标设备:

# 1. 先在主机上编译并 install 到临时目录
make defconfig
make CONFIG_STATIC=y -j$(nproc)
make install CONFIG_PREFIX=./target

# 2. 把 target/ 的内容整体复制到目标设备的根文件系统
#    假设目标设备的根文件系统已经挂载在 /mnt/target
cp -a target/* /mnt/target/

# 3. 验证目标设备上的 BusyBox
cd /mnt/target/bin
ls -la busybox
# 应该看到: busybox
ls -la ls
# 应该看到: ls -> busybox

Android 上的安装

Android 上不走 make install。BusyBox Pro 等应用自己实现了符号链接创建逻辑——通常写到 /system/xbin 或 /sbin。手动方法(已 root 的设备):

# 通过 adb
adb push busybox /system/xbin/busybox
adb shell su -c 'chmod 755 /system/xbin/busybox'
adb shell su -c 'cd /system/xbin && for applet in $(busybox --list); do ln -sf busybox $applet; done'

常见问题

符号链接太多:defconfig 下约 300 个符号链接,在小 Flash 设备上可能占用不少目录条目空间。如果空间紧张,可以直接用 busybox ls 而不创建符号链接,运行时显式调用 busybox 二进制。

init 链接问题:make install 会自动在 CONFIG_PREFIX/sbin/ 下创建 init 符号链接。如果目标系统不是用 BusyBox init,记得删掉它以免内核启动时试图执行它。

权限问题:BusyBox 二进制需要可执行权限(通常 0755),符号链接不需要额外权限。SELinux 强制模式下可能需要额外的 restorecon。