2010年01月26日

ARMのQEMUをソースからビルドして, その上でDebianを動かす

QEMUはAndroidのSDKのエミュレータにも使われています。

QEMUのARMのシステムエミュレータをソースからビルドして、その上でDebianを動かしてみたので、その方法を紹介します。

(最近0.12.2がリリースされましたが、私の環境ではうまくうごかなかったので、0.12.1でのビルド手順を紹介します。)



■Linuxでのビルド

linuxでビルドするのは簡単。Ubuntu 9.04で試した。

SDLライブラリの準備

 $ sudo apt-get install libsdl1.2-dev

ビルド

http://ftp.twaren.net/Unix/NonGNU/qemu/

からソースアーカイブをダウンロード。

 $ tar xvf qemu-0.12.1.tar.gz 
 $ mkdir obj.0.12.1
 $ cd obj.0.12.1
 $ ../qemu-0.12.1/configure --target-list=arm-softmmu
 $ make 

TCGの生成するコードもi386のLinuxではi386、x86_64のLinuxではx86_64になる。

(x86_64のLinuxでi386用のものをビルドしたい場合には環境変数 ARCH_CFLAGS=-m32 を設定してconfigureを実行すればよい。SDLライブラリも32bit版のものを用意する。私の場合はAndroidのソースツリーのprebuiltにあったものをリンクしてみてうまくいった。)

■MinGWを使ったWindowsでのビルド

Windows7 64bitのまっさらな環境からやってみた。

MinGW, MSYSの準備

http://sourceforge.net/projects/mingw/files/

から以下をダウンロードしてインストールした。

MinGW-5.1.6.exe

MSYS-1.0.11.exe

tar-1.22-1-msys-1.0.11-bin.tar.lzma

vim-7.2.1-msys-1.0.11-bin.tar.lzma

zlib の準備

http://www.zlib.net/

からソースのアーカイブをダウンロード。

 $ tar xvf zlib-1.2.3.tar.bz2
 $ cd zlib-1.2.3
 $ ./configuer --prefix=/mingw
 $ make
 $ make install

別ディレクトリでconfigureするとエラーになるので、ソースのあるディレクトリでconfigureを実行する。

SDLの準備

http://www.libsdl.org/

からソースのアーカイブをダウンロード。

 $ tar xvf SDL-1.2.14.tar.gz
 $ mkdir obj
 $ cd obj
 $ ../SDL-1.2.14/configure --prefix=/mingw --disable-shared
 $ make
 $ make install

ダイナミックリンクライブラリを作成してもよいのだが、--disable-shared をつけてスタティックリンクライブラリのみにした。スタティックリンクライブラリならば、DLLのコピーし忘れやバージョンの不整合を気にしなくてすむので。

QEMUのビルド

http://ftp.twaren.net/Unix/NonGNU/qemu/

からソースアーカイブをダウンロード。

 $ tar xvf qemu-0.12.1.tar.gz 
 $ mkdir obj.0.12.1
 $ cd obj.0.12.1
 $ ../qemu-0.12.1/configure --target-list=arm-softmmu --disable-docs
 $ make 

■Debianを動かしてみる

qemuのサイトにはテスト用のLinuxのイメージファイルがあるが、テストのためにもう少し大きなシステムを動かしたい。

debianのネットインストールを試したが、どうも途中でエラーになる。インストーラが古すぎるのかもしれない。(できた。こちらを参照

いろいろと試行錯誤していると、qemu用のdebianのカーネルとユーザーランドのイメージファイルを公開している人がいたので、ありがたく使わせてもらうことにした。

http://blog.aurel32.net/?p=46

rootのパスワードはroot。 通常ユーザとしてuser というアカウントがあり、そのパスワードは user。

armel の起動

#!/bin/sh
qemupath=../bin/
${qemupath}qemu-system-arm -M versatilepb -m 256 \
-kernel vmlinuz-2.6.26-1-versatile -initrd initrd.img-2.6.26-1-versatile \
-hda debian_lenny_armel_small.qcow2 \
-append "root=/dev/sda1" -redir tcp:55555::22

Debianの基本操作

パッケージを最新に更新

    $ su
    # apt-get update
    # apt-get upgrade

(以降でプロンプト# はroot で実行すること。)

タイムゾーンの変更

    # dpkg-reconfigure tzdata

これでAsia/Tokyo にセットする。

sshでログイン可能にする

ターゲットのLinux上にsshパッケージをインストールする。

 # apt-get install ssh

これで自動的にsshdのサービスを起動するところまで設定される。

qemuのコマンドラインオプションに以下を追加する。

 qemu-system-arm   ...  -redir tcp:55555::22

これで、qemuは55555のポートをlistenして仮想マシンの中のポート22にリダイレクトする。22はsshのサービスのポート。55555は任意のポート。他のサービスと重複しないように選ぶ。

外部から以下のようにポート55555にsshコマンドで接続する。

    $ ssh -l user -p 55555 localhost

apt-getで好きなパッケージをいくらでもインストールすることができる。ただし動作は遅い。この上でgccをソースからビルドしてみたが、一晩かかっても終わらなかった。(でも一晩連続稼働できる程度には動作は安定している。)



トラックバックURL

トラックバック一覧

1. クロス開発でのQEMU まとめ(基礎編)  [ KMC Staff Blog ]   2010年09月16日 11:08
ここまでのQEMUの記事のリンク集です。 なお、CELFテクニカルジャンボリーにて、時間をいただきましたので、このあたりについて話をさせていただきます。 (3月5日 中野サンプラザ 入場無料) よろしければご参加ください。

コメント一覧

1. Posted by KMCツジ   2011年04月29日 11:57
MinGWのzlibのビルド時のconfigureで、"Please use win32/Makefile.gcc instead." というメッセージが出る時には、次の手順でビルドできました。

$ make -f win32/Makefile.gcc

インストールは、Makefile.gcc に

BINARY_PATH=/mingw/bin
INCLUDE_PATH=/mingw/include
LIBRARY_PATH=/mingw/lib

を追加してから、

$ make install -f win32/Makefile.gcc

でインストールできるようです

コメントする

名前
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード