我正在尝试在 Android 设备上安装一些命令(即file
更好的版本ls
),并且我正在寻找它的 ARM 二进制文件(即 5TE 架构),但我无法找到下载它们的位置。谷歌搜索“arm ls binary”或“ls binary”之类的东西给了我除了我想要的之外的一切。
有没有一个地方可以找到二进制文件?
答案1
在 Android 设备上安装 Linux 实用程序最简单的方法是将整个发行版安装在子目录中。 “普通”发行版(Debian、Arch、Fedora 等)提供与 Glibc 动态链接的二进制文件,而 Android 不提供。它们需要使用 Glibc 的加载器 ( ) 来执行/lib/ld-linux*.so
。
设置此类系统的一个简单方法是使用 Debian去升压构建初始 Debian 目录树,将其传输到 Android 设备,然后使用apt-get
其他标准 Debian 工具安装软件包。 Debian wiki 上有几个关于该主题的页面:Android 上的 Chroot,HotwoDebianInAndroid。
首先,安装Debootstrap。在 Debian 或衍生版本上,只需安装该
debootstrap
软件包即可。在其他一些 Linux 或其他 Unix 变体上,只需抓住debootstrap 源 tarball或者从 Git 中查看:它只是一个 shell 脚本和支持数据文件。确定您的设备是否支持硬件浮点。如果没有,请替换
armhf
为armel
以下内容。您可以通过检查/proc/cpuinfo
Android(或任何使用 Linux 内核的其他设备)来判断:您必须拥有具有以下功能的 ARMv7(或 ARMv8)thumbee
和vfpv3
.如果您还没有,请安装忙碌盒在 Android 设备上。虽然这不是绝对必要的,但它会在下面派上用场。您可以检索
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 卡,请将 SD 卡安装到您的 Unix PC 上并以 root 身份运行以下命令:
debootstrap --arch=armhf --foreign wheezy /media/sdcard/debian http://http.debian.net/debian
如果没有,请以 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'
现在您需要转移
/tmp/debian.tar.gz
到您的 Android 设备。您可以通过 adb (adb push /tmp/debian.tar.gz /
) 或任何其他适合您的方式来完成此操作,然后解压 tarball(使用 BusyBoxtar
):tar -zxvf /debian.tar.gz
搭建一个舒适的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 "$@"
使该脚本可执行并将其放入
/vendor/bin
Android PATH 或 Android PATH 上的任何其他位置。在您可以完全享受 Linux 安装之前,您需要完成 debootstrap 的工作:在 chroot 中,运行/debootstrap/debootstrap --second-stage
答案2
虽然 GNU 页面似乎没有为该coreutils
项目提供 ARM 二进制文件,但我设法找到了这一页,它以某种方式提供了版本 8.14 的编译二进制文件。
我自己下载了它,二进制ls
文件提供了以下元数据:
$ file ls
ls: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), stripped
这应该适合 ARM 系统。现在,正如 Braatchley 所说,最好的方法可能是coreutils
针对 ARM 目标进行编译。就我而言,我coreutils
直接从 ARM 系统(Raspberry Pi、ARM6L)编译,所有兼容性检查都很顺利。