qemu를 통해 Debian armel에서 Debian i386 바이너리 실행

qemu를 통해 Debian armel에서 Debian i386 바이너리 실행

따라해보려고 해요이 가이드Debian armel을 실행하는 SheevaPlug에 Ventrilo 서버를 설정합니다. 이 페이지에서는 QEMU를 사용하여 Arm 시스템에서 i386용으로 만들어진 바이너리를 실행할 수 있다고 설명합니다.

qemu 설정qemu, qemu-user 및 qemu-libc-i386을 설치해야 한다고 합니다. 처음 두 개를 찾았어요적절한, 하지만qemu-libc-i386패키지가 아닙니다. 그래서 나는 다음과 같이 Ventrilo 서버를 실행하기 위해 qemu를 실행해 보았습니다.

# qemu-i386 ./ventrilo_srv
/lib/ld-linux.so.2: No such file or directory

ld-linux.so.2이것은 armel의 i386 버전인 것 같습니다 ld-linux.so.3.

그래서 저는 다른 Linux 배포판에서 이를 수행하는 방법을 알고 있지만, 그들이 미친 배포판에서 실행할 수 있다면 데비안에서도 실행할 수 있어야 할 것 같습니다. 설치할 수 있는 패키지를 얻을 수 있습니다.libc-i386이렇게 하면 실행되도록 할 수 있습니다(예:ia32 라이브러리x64 시스템의 경우? ) 또한 다른 i386 시스템에서 복사를 시도했지만 so.2아무런 효과가 없었습니다.

답변1

예, QEmu에서 x86 바이너리를 실행할 수 있으며 QEmu는 ARM 프로세서에서 실행됩니다. QEmu는 x86 프로세서의 소프트웨어 에뮬레이션을 수행하기 때문에 속도가 매우 느리며 RAM이 부족할 수 있지만 작동합니다.

qemu-user패키지에는 가상 머신 자체, x86 프로세서 및 일부 하드웨어 장치의 에뮬레이터, 해당 하드웨어에서 실행되는 Linux 커널이 포함되어 있습니다. ( qemu-system패키지에는 선택한 운영 체제를 설치할 수 있는 하드웨어 에뮬레이터가 포함되어 있습니다.) 여전히 /lib/ld-linux.so.2(동적으로 링크된 실행 파일을 실행하는 데 필요한 동적 로더) 및 여러 가지를 포함한 런타임 환경으로 가상 머신을 채워야 합니다. 도서관. 이것이 qemu-libc-i386Optware의 패키지가 제공하는 것입니다. amd64 시스템 과 다소 비슷 ia32-libs하지만 amd64 프로세서가 기본적으로 i386 바이너리를 실행할 수 있기 때문에 훨씬 더 간단합니다. 여기서는 x86 VM에 라이브러리가 있어야 합니다.

잡으려고 노력할 수도 있습니다qemu-libc-i386Optware의 소프트웨어 패키지. Optware 패키지 형식은 Debian과 매우 유사하므로 ipk를 deb로 수동으로 변환할 수 있습니다.

mkdir tmp
wget http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/qemu-libc-i386_2.3.6-1_arm.ipk
tar xzf qemu-libc-i386_2.3.6-1_arm.ipk
ar rc qemu-libc-i386_2.3.6-1_arm.deb debian-binary control.tar.gz data.tar.gz 

나는 이것이 작동할 것이라고 보장하지 않습니다. QEmu 버전이 일치하는지 확인해야 할 수도 있습니다.

수정된 ipk 설치가 작동하지 않으면 해당 내용을 시스템에 복사해 보십시오. 어딘가에 압축을 풀고 data.tar.gz(또는 다른 x86 시스템에서 동일한 파일을 가져오고) postinst스크립트가 control.tar.gz수행하는 작업을 확인한 다음 qemu-i386.

답변2

내 PC i386을 복사하여 ARM 장치의 문제를 해결했습니다.ld-linux.so.2다음과 같이:

scp /lib/ld-linux.so.2 [email protected]:/lib

그런 다음 필요한 모든 공유 라이브러리를 복사하십시오. 제 경우에는 복사하기 전에 장치 내부의 새 폴더에 모두 정리했습니다.

mkdir /lib/i386-linux-gnu
scp /usr/lib/i386-linux-gnu/libstdc++.so.6 [device]:/lib/i386-linux-gnu
scp /usr/lib/i386-linux-gnu/libgcc_s.so.1 [device]:/lib/i386-linux-gnu
scp /usr/lib/i386-linux-gnu/libc.so.6 [device]:/lib/i386-linux-gnu
scp /usr/lib/i386-linux-gnu/libm.so.6 [device]:/lib/i386-linux-gnu

관련 정보