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 の準備
からソースのアーカイブをダウンロード。
$ tar xvf zlib-1.2.3.tar.bz2 $ cd zlib-1.2.3 $ ./configuer --prefix=/mingw $ make $ make install
別ディレクトリでconfigureするとエラーになるので、ソースのあるディレクトリでconfigureを実行する。
SDLの準備
からソースのアーカイブをダウンロード。
$ 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のカーネルとユーザーランドのイメージファイルを公開している人がいたので、ありがたく使わせてもらうことにした。
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
トラックバック一覧
コメント一覧
$ 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
でインストールできるようです