file
Android 장치(예: 더 나은 버전 ) 에 일부 명령을 설치하려고 하는데 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데비안인안드로이드.
먼저 Debootstrap을 설치합니다. Debian 또는 파생 제품에서는
debootstrap
패키지를 설치하기만 하면 됩니다. 다른 Linux 또는 다른 Unix 변형에서는debootstrap 소스 타르볼또는 Git에서 볼 수 있습니다. 이는 단지 쉘 스크립트이자 지원 데이터 파일일 뿐입니다.장치가 지원하는지 확인하드웨어 부동 소수점. 그렇지 않은 경우 다음
armhf
으로 교체하십시오. Android(또는 Linux 커널을 사용하는 다른 장치)를 확인하면 알 수 있습니다. 다음 기능을 갖춘 ARMv7(또는 ARMv8)이 있어야armel
합니다 ./proc/cpuinfo
thumbee
vfpv3
아직 없으시다면 설치해보세요바쁜 상자Android 기기에서. 꼭 필요한 것은 아니지만 아래에서 유용하게 사용할 수 있습니다. Debian 바이너리 패키지를 검색하고
busybox-static
, Extract 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에 마운트하고 루트로 실행하십시오. :
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
편안한 Linux 프로그램 실행 환경을 구축하세요. 가장 쉬운 방법은chroot. 나는 Debian 시스템이 있고
/media/sdcard/debian
BusyBox가 있다고 가정합니다. 쉘 스크립트를 작성하십시오.#!/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)에서 직접 컴파일했는데 모든 호환성 검사가 원활하게 진행되었습니다.