我正在尝试在 android 设备上安装一些命令(即file
更好的版本ls
),我正在寻找它的 ARM 二进制文件(即 5TE 架构),但我找不到下载它们的地方. 谷歌搜索诸如“arm ls binary”或“ls binary”之类的东西给了我除我想要的之外的一切。
有没有一个地方可以找到二进制文件?
在 Android 设备上安装 Linux 实用程序的最简单的方法是在子目录中安装整个发行版。“普通”发行版(Debian、Arch、Fedora 等)提供与 Glibc 动态链接的二进制文件,而 Android 不提供。它们需要使用/lib/ld-linux*.so
Glibc的加载器 ( )来执行。
设置此类系统的一种简单方法是使用 Debian 的deboostrap构建初始 Debian 目录树,将其传输到 Android 设备,然后使用apt-get
其他标准 Debian 工具安装软件包。Debian wiki 上有几页关于该主题的页面:ChrootOnAndroid、HottwoDebianInAndroid。
首先,安装 Debootstrap。在 Debian 或衍生版本上,只需安装debootstrap
软件包。在其他一些 Linux 或其他 Unix 变体上,只需获取debootstrap 源 tarball或从 Git 中查看:它只是一个 shell 脚本和支持数据文件。
确定您的设备是否支持硬件浮点。如果没有,则更换armhf
的armel
下方。您可以通过/proc/cpuinfo
在 Android(或其他任何使用 Linux 内核的系统)下进行检查来判断:您必须拥有 ARMv7(或 ARMv8)thumbee
以及vfpv3
.
如果您还没有它,请在 Android 设备上安装BusyBox。虽然它不是绝对必要的,但它会在下面派上用场。您可以检索busybox-static
Debian 二进制包,使用 提取 BusyBox 可执行文件ar p busybox-static_*_armhf.deb data.tar.gz | tar -xzf - ./bin/busybox
,并将busybox
二进制文件传输到 Android 设备。下面,我假设 BusyBox 位于/vendor/bin/busybox
.
如果您的 Android 设备能够挂载格式化为 ext2/ext3/ext4(或任何其他支持 unix 权限的文件系统,即非 FAT)的 SD 卡,请在您的 Unix PC 上挂载 SD 卡并以 root 身份运行以下命令:
debootstrap --arch=armhf --foreign wheezy /media/sdcard/debian http://http.debian.net/debian
Run Code Online (Sandbox Code Playgroud)
如果没有,请以 root 身份(或在 fakeroot 下,如果有)运行以下命令:
sh -c 'debootstrap --arch=armhf --foreign wheezy /tmp/debian http://http.debian.net/debian && tar -zcf /tmp/debian.tar.gz -C /tmp debian'
Run Code Online (Sandbox Code Playgroud)
现在您需要转移/tmp/debian.tar.gz
到您的 Android 设备。您可以通过 adb ( adb push /tmp/debian.tar.gz /
) 或任何其他适合您的方式执行此操作,然后解压缩 tarball(使用 BusyBox tar
):
tar -zxvf /debian.tar.gz
Run Code Online (Sandbox Code Playgroud)设置一个舒适的环境来运行 Linux 程序。简单的方法是在chroot 中运行它们。我假设 Debian 系统位于/media/sdcard/debian
并且您有 BusyBox。创建一个shell脚本:
#!/vendor/bin/busybox sh
LINUX_ROOT=/media/sdcard/debian
alias bb=/vendor/bin/busybox
unset LD_LIBRARY_PATH PATH SHELL
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# Bind-mount filesystems if not already done
for d in /dev /media /proc /sys; do
bb grep -q " $LINUX_ROOT$d " /proc/mounts || bb mount -o rbind "$d" "$LINUX_ROOT/$d"
done
for d in /data /system; do
if ! bb grep -q " $LINUX_ROOT$d " /proc/mounts; then
mkdir -p "$LINUX_ROOT/android/$d"
bb mount -o rbind "$d" "$LINUX_ROOT/android/$d"
fi
done
exec bb chroot "$LINUX_ROOT" /bin/bash "$@"
Run Code Online (Sandbox Code Playgroud)
使此脚本可执行并将其放入/vendor/bin
Android PATH中或其他任何位置。在您可以充分享受 Linux 安装之前,您需要完成 debootstrap 的工作:在 chroot 中,运行
/debootstrap/debootstrap --second-stage
Run Code Online (Sandbox Code Playgroud)