Onde baixar binários do coreutils?

3

Estou tentando instalar alguns comandos em um dispositivo Android (ou seja, file e uma versão melhor de ls ) e estou procurando os binários do ARM para ele (ou seja, a arquitetura 5TE), mas eu Não consigo encontrar um lugar para baixá-los. Pesquisando coisas como "arm ls binary" ou "ls binary" estão me dando tudo menos o que eu quero.

Existe um único lugar para encontrar os binários?

    
por Mitch 16.12.2014 / 15:24

2 respostas

6

A maneira menos dolorosa de instalar utilitários do Linux em um dispositivo Android é instalar uma distribuição inteira em um subdiretório. Distribuições “normais” (Debian, Arch, Fedora, etc.) fornecem binários que são dinamicamente vinculados ao Glibc, que o Android não fornece. Eles precisam ser executados com o carregador ( /lib/ld-linux*.so ) da Glibc.

Uma maneira simples de configurar tal sistema é usar o deboostrap do Debian para construir uma árvore inicial de diretórios Debian, transferi-lo para o dispositivo Android e, a partir daí, instale pacotes com apt-get e outras ferramentas Debian padrão. Existem algumas páginas sobre o tópico no wiki do Debian: ChrootOnAndroid , HotwoDebianInAndroid .

  1. Primeiro, instale o Debootstrap. No Debian ou derivado, basta instalar o pacote debootstrap . Em algum outro Linux ou outra variante Unix, simplesmente pegue o tarball de origem do debootstrap ou confira no Git: é só um script de shell e arquivos de dados de suporte.

  2. Determine se o seu dispositivo suporta ponto flutuante de hardware . Se isso não acontecer, substitua armhf por armel abaixo. Você pode dizer, verificando /proc/cpuinfo no Android (ou qualquer outra coisa usando um kernel Linux): você deve ter o ARMv7 (ou ARMv8) com os recursos thumbee e vfpv3 .

  3. Se você ainda não tem, instale o BusyBox no dispositivo Android. Embora não seja estritamente necessário, será útil abaixo. Você pode recuperar o pacote binário busybox-static Debian, extrair o executável do BusyBox com ar p busybox-static_*_armhf.deb data.tar.gz | tar -xzf - ./bin/busybox e transferir o binário busybox para o dispositivo Android. Abaixo, presumo que o BusyBox está localizado em /vendor/bin/busybox .

  4. Se o seu dispositivo Android for capaz de montar um cartão SD formatado como ext2 / ext3 / ext4 (ou qualquer outro sistema de arquivos compatível com permissões unix, ou seja, não FAT), monte o cartão SD no seu PC Unix e execute o seguinte comando como root:

    debootstrap --arch=armhf --foreign wheezy /media/sdcard/debian http://http.debian.net/debian
    

    Caso contrário, execute o seguinte comando como root (ou sob fakeroot, se tiver):

    sh -c 'debootstrap --arch=armhf --foreign wheezy /tmp/debian http://http.debian.net/debian && tar -zcf /tmp/debian.tar.gz -C /tmp debian'
    

    Agora você precisa transferir /tmp/debian.tar.gz para o seu dispositivo Android. Você pode fazer isso em adb ( adb push /tmp/debian.tar.gz / ) ou qualquer outra maneira que funcione para você, então descompacte o tarball (use o BusyBox tar ):

    tar -zxvf /debian.tar.gz
    
  5. Configure um ambiente confortável para executar programas do Linux. A maneira mais fácil é executá-los em um chroot . Eu suponho que o sistema Debian está localizado em /media/sdcard/debian e que você tem BusyBox. Crie um script de 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 "$@"
    

    Torne este script executável e coloque-o em /vendor/bin ou em qualquer outro lugar no Android PATH. Antes que você possa desfrutar plenamente da instalação do Linux, você precisa concluir o trabalho do debootstrap: no chroot, execute

    /debootstrap/debootstrap --second-stage
    
por 17.12.2014 / 01:10
1

Embora a página GNU não forneça binários de ARM para o projeto coreutils , consegui encontrar esta página , que de alguma forma fornece binários compilados para a versão 8.14.

Eu mesmo fiz o download e o ls binário fornece os seguintes metadados:

$ file ls
ls: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), stripped

Qual deve caber para um sistema ARM. Agora, como Bratchley disse, a melhor maneira é provavelmente compilar coreutils para um alvo ARM. Até onde eu sei, eu compilei coreutils diretamente de um sistema ARM (Raspberry Pi, ARM6L), e todas as verificações de compatibilidade correram bem.

    
por 16.12.2014 / 17:57

Tags