본문 바로가기

작업일지/QEMU

Cross-compile QEMU from Linux

MSYS나 CYGWIN을 사용하지 않고 coLinux기반에서 QEMU를 컴파일 하는 방법.



[MinGW32 설치]
gcc등 기본적인 개발툴 설치.(build-essential로 기본적인 개발툴들 모두 설치)
 
$ sudo apt-get install build-essential


크로스툴을 설치한다.
 
$ sudo apt-get install mingw32






[파일 다운로드]
다음 파일들을 '~/qemu'에 다운로드 받는다.
qemu-0.14.0-rc1.tar.gz      <- 이 버전은 컴파일시 몇가지 수정해야 하는부분이 생긴다. 
                                           git로 문제가 없는 qemu-0.14.0-rc2를 다운받는다.
                                           오늘날자(2011.02.15)로 보니 stable이 qemu-0.14.0-rc2(0.13.92)다.
                                           정확한 버전은 다운로드후 VERSION파일을 보면 알수있다.
                                           참고로 qemu-0.14.0-rc1은 버전이 0.13.91임.
 
$ mkdir ~/qemu
$ cd ~/qemu
$ wget http://www.libsdl.org/release/SDL-1.2.14.tar.gz
$ wget http://zlib.net/zlib-1.2.5.tar.gz
$ wget http://download.savannah.gnu.org/releases/qemu/qemu-0.14.0-rc1.tar.gz
$ git clone git://git.qemu.org/qemu-stable-0.14.git






[압축 해제]
 
$ tar -zxf SDL-1.2.14.tar.gz
$ tar -zxf zlib-1.2.5.tar.gz
$ tar -zxf qemu-0.14.0-rc1.tar.gz






[SDL] 
 
$ cd ~/qemu/SDL-1.2.14
$ ./configure --host=i586-mingw32msvc
$ sudo make
$ sudo make install





[ZLIB]
디렉토리 생성

$ cd ~/qemu/zlib-1.2.5
$ mkdir ./bin
$ mkdir ./bin/bin
$ mkdir ./bin/include
$ mkdir ./bin/lib


환경변수 설정
 
$ AR=/usr/bin/i586-mingw32msvc-ar
$ CC=/usr/bin/i586-mingw32msvc-gcc
$ CPP=/usr/bin/i586-mingw32msvc-cpp
$ CPPFLAGS="-I/usr/i586-mingw32msvc/include -I./bin/include"
$ CXX=/usr/bin/i586-mingw32msvc-g++
$ LDFLAGS="-L/usr/i586-mingw32msvc/lib -L./bin/lib -L/usr/lib"  <- '/usr/lib'는 libc.so를 참조하기 위한 경로.
$ PATH=/usr/i586-mingw32msvc/bin:$PATH
$ RANLIB=/usr/bin/i586-mingw32msvc-ranlib
$ RC=/usr/bin/i586-mingw32msvc-windres
$ WINDRES=/usr/bin/i586-mingw32msvc-windres
$ export AR CC CPP CPPFLAGS CXX LDFLAGS PATH RANLIB RC WINDRES


빌드
 
$ ./configure --prefix=./bin
$ sudo make
$ sudo make install


dll 생성
 
$ /usr/bin/i586-mingw32msvc-gcc -shared -o ./bin/bin/zlib1.dll -Wl,--out-
$ implib=./bin/lib/libz.dll.a [!em]*.o





[QEMU]
qemu-0.14.0-rc1은 컴파일시 수정을 해야 하는 부분들이 있다. qemu-0.14.0-rc2를 사용 하는게 좋다.
qemu-0.14.0-rc1을 사용 한다면 아래 참조, qemu-0.14.0-rc2를 사용 한다면 바로 빌드를 한다.
 
qemu-0.14.0-rc1 수정 포인트 - qemu-0.14.0-rc2버전 사용자라면 해당사항 없음.



빌드
 
$ mkdir ~/qemu/qemu-stable-0.14/qemu-bin
$ sudo ./configure --prefix=/home/mongin/qemu/qemu-stable-0.14/qemu-bin --disable-linux-user --enable-system --disable-darwin-user --target-list=i386-softmmu,arm-softmmu --cpu=i386 --cross-prefix=i586-mingw32msvc- --extra-cflags=-I/home/mongin/qemu/zlib-1.2.5/bin/include --extra-ldflags=-L/home/mongin/qemu/zlib-1.2.5/bin/lib
$ sudo make
$ sudo strip ./i386-softmmu/qemu.exe
$ sudo strip ./arm-softmmu/qemu-system-arm.exe
$ sudo strip ./qemu-img.exe
$ sudo strip ./qemu-io.exe
$ sudo make install

  • ./configure에서 에러 발생시 자세한 내용을 ./config.log에서 살펴볼수 있다.
  • --target-list에서 x86_64-softmmu의 경우 컴파일시 " CC    x86_64-softmmu/translate.o"에서 빌드 하는데 시간이오래 걸린다.
  • --prefix옵션에 경로 설정시 전체경로를 적어야 한다. "~/qemu/qemu-stable-0.14/qemu-bin"나 "./qemu-bin"과 같은 경로를 사용하면 안된다.
  • --target-list에서 사용 가능한 것들 : 
    • portable: i386-softmmu, x86_64-softmmu, arm-softmmu, cris-softmmu, m68k-softmmu, microblaze-softmmu, mips-softmmu, mipsel-softmmu, mips64-softmmu, mips64el-softmmu, ppc-softmmu, ppcemb-softmmu, ppc64-softmmu, sh4-softmmu, sh4eb-softmmu, sparc-softmmu, sparc64-softmmu
    • Linux specific: i386-linux-user, x86_64-linux-user, alpha-linux-user, arm-linux-user,armeb-linux-user,cris-linux-user,m68k-linux-user,microblaze-linux-user,mips-linux-user,mipsel-linux-user,ppc-linux-user,ppc64-linux-user,ppc64abi32-linux-user,sh4-linux-user,sh4eb-linux-user,sparc-linux-user,sparc64-linux-user,sparc32plus-linux-user
    • Darwin specific: i386-bsd-user, x86_64-bsd-user, sparc-bsd-user, sparc64-bsd-user





qemu-bin에 빌드된 내용이 있을것이다.
마지막으로 빌드해 놓았던 SDL.dll을 이곳으로 복사한다.
 
$ sudo cp /usr/local/cross-tools/i386-mingw32/bin/SDL.dll ./qemu-bin/SDL.dll













[참고]
MinGW 크로스컴파일러

SDL

zlib

zlib 크로스 컴파일



'작업일지 > QEMU' 카테고리의 다른 글

Windows에서 qemu의 qow같은 파일 만드는 방법  (0) 2011.01.31
zlib 컴파일  (0) 2011.01.26
ARM Emulation With QEMU  (0) 2010.11.19
qemu, colinux network 작업  (0) 2010.03.11
QEMU로 ARM에뮬레이팅 하기  (0) 2010.03.01