哪里可以下载 coreutils 的二进制文件?

哪里可以下载 coreutils 的二进制文件?

我正在尝试在 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

  1. 首先,安装Debootstrap。在 Debian 或衍生版本上,只需安装该debootstrap软件包即可。在其他一些 Linux 或其他 Unix 变体上,只需抓住debootstrap 源 tarball或者从 Git 中查看:它只是一个 shell 脚本和支持数据文件。

  2. 确定您的设备是否支持硬件浮点。如果没有,请替换armhfarmel以下内容。您可以通过检查/proc/cpuinfoAndroid(或任何使用 Linux 内核的其他设备)来判断:您必须拥有具有以下功能的 ARMv7(或 ARMv8)thumbeevfpv3.

  3. 如果您还没有,请安装忙碌盒在 Android 设备上。虽然这不是绝对必要的,但它会在下面派上用场。您可以检索busybox-staticDebian 二进制包,使用 提取 BusyBox 可执行文件ar p busybox-static_*_armhf.deb data.tar.gz | tar -xzf - ./bin/busybox,并将二进制文件传输busybox到 Android 设备。下面,我假设 BusyBox 位于/vendor/bin/busybox

  4. 如果您的 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(使用 BusyBox tar):

    tar -zxvf /debian.tar.gz
    
  5. 搭建一个舒适的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/binAndroid 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)编译,所有兼容性检查都很顺利。

相关内容