Rasbian에서 x86 에뮬레이트

Rasbian에서 x86 에뮬레이트

Rasbian을 실행하는 Raspberry Pi에서 Starbound 서버를 실행하고 싶습니다.
서버는 x86 아키텍처에서 실행되도록 구축되었으므로 내 목표는 x86 아키텍처를 에뮬레이트하여 서버를 실행하는 것입니다.

편집: box86은 64비트 x86 바이너리를 실행하지 않습니다.

이를 위해 나는박스 86.
x86 프로그램을 실행할 수 있습니다(steamcmd는 서버를 다운로드할 수 있는 프로그램입니다). 그러나 서버를 실행하면

bash: ./program: cannot execute binary file: Exec format error

box86이 x86 프로그램을 만나면 에뮬레이션해야 하기 때문에 이것은 이상합니다.

Qemu를 사용하여 서버를 시뮬레이션하려고 합니다.

sudo apt install qemu-user qemu-system qemu
sudo qemu-x86_64 starbound_server

~로 이어지다

/lib64/ld-linux-x86-64.so.2: No such file or directory

일부 동적 라이브러리가 누락된 것 같습니다. 나는 이 라이브러리가 qemu와 함께 제공될 것이라고 생각했기 때문에 매개변수를 사용하여 다른 ld- 파일을 지정해
보았습니다 . -L그런데 프로그램은 /lib64 폴더만 보고 있는 것 같습니다.
나의 마지막 시도는 x86 시스템의 lib 파일을 사용하여 이 폴더를 만드는 것이었습니다. 그러나 이는 다음과 같은 결과로 이어집니다.

ERROR: ld.so: object '/usr/lib/arm-linux-gnueabihf/libarmmem-${PLATFORM}.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.

이 문제를 해결하기 위해 사람들은 /etc/ld.so.preload에 대한 참조를 제거하도록 변경을 제안했지만 libarmmem파일이 Rasbian 시스템에 존재하지 않습니다.

x86 프로그램을 에뮬레이션하는 더 좋은 방법이 있는지 궁금합니다.
그렇지 않은 경우 /lib64 폴더를 채우기에 적합한 라이브러리를 어디서 찾을 수 있습니까?

readelf에서 얻은 정보는 다음과 같습니다.

machine: Advanced Micro Devices X86-64
type: EXEC
class: ELF64

공유 라이브러리

[libpthread.so.0]
[libdl.so.2]
librt.so.1]
[libm.so.6]
[libc.so.6]
[ld-linux-x86-64.so.2]

답변1

의견을 주신 Stephen Kitt에게 감사드립니다.

사용 chroot이 튜토리얼문제를 해결했습니다.

64비트 Debian을 사용하여 디렉터리를 만듭니다.

apt install binutils debootstrap
mkdir my-directory
debootstrap --arch amd64 stretch my-directory http://deb.debian.org/debian

qemu그런 다음 환경에 설치하십시오 .

chroot my-directory
apt install qemu qemu-system

그런 다음 언제든지 프로그램을 실행하십시오.

chroot my-directory
qemu-x86_64 my_x86_programm

답변2

QEMU 5.2를 사용하면서 이 문제가 발생했고 chroot 없이 작동하는 솔루션이 필요했습니다. /some_path에 x86_64 라이브러리(libc, ld-linux-x86_64.so.2 등)를 설치하면 다음을 수행할 수 있다는 것을 알았습니다.

ln -s . /some_path/lib64

그런 다음 다음을 사용할 수 있습니다.

qemu-static-x86_64 -L /some_path <command to run>

또한 다음을 설정해야 했습니다.

LD_LIBRARY_PATH=/some_path

하지만 이는 내 특정 환경 때문일 수도 있습니다.

또한 qemu-user를 사용할 수 없는 Centos7을 사용하고 있기 때문에(aarch64의 경우) debian qemu-user-static .deb를 다음에서 얻을 수 있었습니다.https://packages.debian.org/sid/main/qemu-user-static그리고 사용

ar x <deb file>
tar -xf data.tar.xz

그런 다음 생성된 qemu-static* 바이너리는 정적으로 연결되어 있으므로 사용하세요. 물론 x86_64 라이브러리를 설치해야 했습니다.

답변3

아직 시도해보지 않았기 때문에 그냥 생각입니다.

/lib64/ld-linux-x86-64.so.2: No such file or directory라이브러리를 설치하지 않아서 발생합니다.

외부 아키텍처용 라이브러리를 추가해야 합니다.

데비안에는 이를 관리하는 다중 아키텍처 패키지(제 기억이 맞다면)가 있습니다. 외부 아키텍처는 운영 체제가 다른 패키지를 가져오는 위치인 Debian 저장소에서 사용할 수 있습니다.

라이브러리 혼란을 피하기 위해 chroot/mount 네임스페이스를 사용할 수 있습니다.

관련 정보