2013-08-06 3 views
1

qemu로 펌웨어를 에뮬레이트하려고하는데이를 실행하는 중에 오류가 발생합니다. 모든qemu에서 MIPS 펌웨어를 에뮬레이트하십시오.

먼저 나는 폴더에 펌웨어 파일 시스템을 추출하고, 그것을 QEMU-에는 mipsel 파일 드 복사 :

다음
bin cdrom dev etc home init lib linuxrc mnt opt proc qemu-mipsel root sbin sys tango tmp udev usr var 

내가 chroot 환경과 에뮬레이터 실행 :

chroot . ./qemu-mipsel ./bin/ls

을 그리고 다음 오류가 발생합니다.

chroot: failed to run command `./qemu-mipsel': No such file or directory 

인터넷 검색 나는 그것이 qemu가 의존한다는 것을 발견했습니다. 라이브러리는 내가 그들을 위해 검색 할 수 있도록 chroot 환경에 포함되지 :

linux-vdso.so.1 => (0x00007fffe79ff000) 
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fcd9da57000) 
libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007fcd9d855000) 
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fcd9d55d000) 
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fcd9d2db000) 
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fcd9d0be000) 
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcd9cd34000) 
/lib64/ld-linux-x86-64.so.2 (0x00007fcda007a000) 
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fcd9caf7000) 

그리고 일부 라이브러리는 ./lib/에서 누락 :

리눅스 vdso.so.1 libgthread-2.0.so.0 libglib-2.0.so.0 /lib64/ld-linux-x86-64.so.2 libpcre.so.3 나는이 문제를 해결할 수있는 방법

? 시스템 라이브러리에 대한 심볼릭 링크를 만들 수 있습니까? 아니면 복사해야합니까? 또한 linux-vdso.so.1은 시스템에 존재하지 않습니다. 어디서 구할 수 있습니까? 문안 인사.

답변

1

linux-vdso.so.1은 실제로 커널입니다. 다른 파일들은 GNU/Linux 배포판 (예 : Debian, eglibc, pcre3 및 glib2.0 소스 패키지)에서 가져옵니다. 실제로 chroot에 복사해야합니다. /lib64/ld-linux-x86-64.so.2의 경우 경로 이름은 정확한 것이어야합니다. 경로가 이진 파일에 하드 코딩되어 있기 때문입니다.

호스트와 대상 라이브러리를 구별해야하기 때문에 다중 경로 된 경로에서 데비안을 이미 실행하고있는 것 같습니다.

또는 qemu-mipsel을 정적으로 컴파일하고 연결할 수 있습니다.

+0

나는 chroot 안의 모든 라이브러리를 coppied했지만 지금은이 에러가 발생한다 : ./qemu-mipsel : 공유 라이브러리를로드하는 중 오류가 발생한다 : librt.so.1 : 틀린 ELF 클래스 : ELFCLASS32 – Nucklear

+0

나는 그것이 librt.so 파일이 잘못되었습니다. Multi-Arch를 사용하여 실행중인 mipsel 이미지도 있습니까? 나는 $ {chrootbasepath} /lib/librt.so.1이 $ {chrootbasepath} /lib/mipsel-linux-gnu/librt.so.1 대신에 사용되어 x86 바이너리 qemu가이를 선택할 수 있다고 생각합니다. 다음과 같이 qemu 바이너리를 실행할 수 있습니다 : env LD_LIBRARY_PATH =/lib/x86_64-linux-gnu :/usr/lib/x86_64-linux-gnu chroot $ chrootbasepath ./qemu-mipsel ... (그렇지 않으면 항상 정적으로 컴파일하십시오.) – mirabilos