armv7에서 X86 바이너리 실행

armv7에서 X86 바이너리 실행

Raspberry Pi2에서 SNBC USB 프린터를 실행하려고 합니다.

이렇게 하려면 SNBC USB 프린터의 필터 바이너리를 /usr/lib/cups/filter. armv7안 되겠지만, 궁금해서 시도해 봤다, 컵이 말했다 /usr/lib/cups/filter/rasterorp3150 failed.

나는 인터넷에서 해결책을 찾았고 사람들은 Qemu 사용을 제안했습니다. 그러나 이는 전체 x86 플랫폼을 위한 것입니다. x86 바이너리를 arm 바이너리로 쉽게 변환하는 방법이 있습니까?

그런데 x86 바이너리를 동등한 바이너리 hexedit로 변환하는 도구를 사용하는 것이 좋은 생각입니까? armv7( opcode변환)

그렇다면 누구든지 이 작업을 수행하는 방법에 대한 아이디어를 제공할 수 있습니까?

답변1

넌 쉽게 전환할 수 없어x86ARM에 대한 바이너리. 제조업체로부터 소스 코드나 ARM 바이너리를 얻을 수 없고 실제로 Pi2와 함께 프린터를 사용하고 싶다면 Qemu 방법이 올바른 방법이지만 매우 느릴 수 있습니다. Qemu는 전체 시스템 시뮬레이션을 수행할 수 있지만 단일 프로세스 시뮬레이션에도 매우 효율적입니다.

나는 당신이 Pi2에 어떤 종류의 데비안 파생물을 가지고 있고(이것이 Raspbian에 적용되는지는 잘 모르겠습니다), 당신이 가지고 있는 바이너리는 i386(64비트라면 amd64사용) 위한 것이라고 가정합니다. 먼저 i386외부 스키마로 추가합니다.

sudo dpkg --add-architecture i386
sudo apt-get update

ldd그런 다음 바이너리를 실행 하고 일반적으로 필요한 라이브러리를 추가합니다.

sudo apt-get install libc6:i386

그리고 :i386접미사가 추가된 다른 모든 것. 설치된 패키지가 제거되지 않는지 확인하십시오. 필요한 모든 것이 다중 아키텍처를 지원하기를 바랍니다. (그렇지 않으면 나머지는 작동하지 않습니다.)

이 작업을 완료한 후 아직 설치하지 않았다면 설치 qemu-user-static하고 다음 을 사용하여 프로그램을 실행할 수 있습니다.binfmt-supportqemu-i386-static

qemu-i386-static /usr/lib/cups/filter/rasterorp3150

실제로 binfmt-support직접 실행해야 하기 때문에(지시한 대로)토비 스페이트):

/usr/lib/cups/filter/rasterorp3150

( binfmt-supportQemu는 이 작업을 투명하게 수행하는 데 사용됩니다.)

사용하고 싶지 않다면 다른 곳으로 binfmt-support옮기 rasterorp3150세요.

sudo mv /usr/lib/cups/filter/rasterorp3150 /usr/lib/cups/filter/rasterorp3150.x86

다음을 포함하는 스크립트를 설치하십시오.

#!/bin/sh
exec qemu-i386-static /usr/lib/cups/filter/rasterorp3150.x86 "$@"

처럼 /usr/lib/cups/filter/rasterorp3150.

원한다면 이 모든 것에 대해 chroot를 설정할 수 있습니다. debootstrap해당 --foreign옵션을 참조하세요(chroot는 자동으로 Qemu를 사용하도록 설정할 수 있습니다).

관련 정보