coreutils 바이너리는 어디서 다운로드할 수 있나요?

coreutils 바이너리는 어디서 다운로드할 수 있나요?

fileAndroid 장치(예: 더 나은 버전 ) 에 일부 명령을 설치하려고 하는데 ls이에 대한 ARM 바이너리(예: 5TE 아키텍처)를 찾고 있지만 다운로드할 위치를 찾을 수 없습니다. "arm ls 바이너리" 또는 "ls 바이너리"와 같은 것을 인터넷 검색하면 내가 원하는 것 이외의 모든 것을 얻을 수 있습니다.

바이너리를 찾을 수 있는 곳이 있나요?

답변1

Android 장치에 Linux 유틸리티를 설치하는 가장 쉬운 방법은 전체 배포판을 하위 디렉터리에 설치하는 것입니다. "일반" 배포판(Debian, Arch, Fedora 등)은 Glibc와 동적으로 연결된 바이너리를 제공하지만 Android는 그렇지 않습니다. 를 실행하려면 Glibc의 로더( )를 사용해야 합니다 /lib/ld-linux*.so.

이러한 시스템을 설정하는 쉬운 방법은 Debian을 사용하는 것입니다.부스트하러가기초기 Debian 디렉터리 트리를 빌드하고 이를 Android 장치로 전송한 다음 apt-get다른 표준 데비안 도구를 사용하여 패키지를 설치합니다. 데비안 위키에는 해당 주제에 대한 여러 페이지가 있습니다:안드로이드의 Chroot,Hottwo데비안인안드로이드.

  1. 먼저 Debootstrap을 설치합니다. Debian 또는 파생 제품에서는 debootstrap패키지를 설치하기만 하면 됩니다. 다른 Linux 또는 다른 Unix 변형에서는debootstrap 소스 타르볼또는 Git에서 볼 수 있습니다. 이는 단지 쉘 스크립트이자 지원 데이터 파일일 뿐입니다.

  2. 장치가 지원하는지 확인하드웨어 부동 소수점. 그렇지 않은 경우 다음 armhf으로 교체하십시오. Android(또는 Linux 커널을 사용하는 다른 장치)를 확인하면 알 수 있습니다. 다음 기능을 갖춘 ARMv7(또는 ARMv8)이 있어야 armel합니다 ./proc/cpuinfothumbeevfpv3

  3. 아직 없으시다면 설치해보세요바쁜 상자Android 기기에서. 꼭 필요한 것은 아니지만 아래에서 유용하게 사용할 수 있습니다. Debian 바이너리 패키지를 검색하고 busybox-static, Extract BusyBox 실행 파일을 사용하고 ar p busybox-static_*_armhf.deb data.tar.gz | tar -xzf - ./bin/busybox, 바이너리를 busyboxAndroid 장치로 전송할 수 있습니다. 아래에서는 BusyBox가 위치한다고 가정합니다 /vendor/bin/busybox.

  4. Android 장치가 ext2/ext3/ext4(또는 unix 권한을 지원하는 기타 파일 시스템, 즉 비 FAT)로 포맷된 SD 카드를 마운트할 수 있는 경우 SD 카드를 Unix PC에 마운트하고 루트로 실행하십시오. :

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

    그렇지 않은 경우 루트로(또는 가능한 경우 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/debianBusyBox가 있다고 가정합니다. 쉘 스크립트를 작성하십시오.

    #!/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가 말했듯이 가장 좋은 접근 방식은 아마도 coreutilsARM 대상에 맞게 컴파일하는 것입니다. 제 경우에는 coreutilsARM 시스템(Raspberry Pi, ARM6L)에서 직접 컴파일했는데 모든 호환성 검사가 원활하게 진행되었습니다.

관련 정보