2013年1月8日火曜日

QEMUでARM Ubuntuを動作させる

ホスト環境は、Windows7 64bit です。(基本的には Linux 環境でも同じはずです。)
ターゲット環境は、QEMU ARM Versatile Express 評価ボードです。

QEMU は、以前解説した環境でビルドした、32bit Windows 版を使用しました。バージョンは 1.1.2 です。
 pragma coroutine-win32.c の最適化をオフにしてビルドしました。現在 QEMU ON WINDOWS のサイトでは、MinGW gcc-4.7.2-1 を使用しているようなので、gcc をアップデートすれば、このハックは不要になるかもしれません。(未確認)

ARM Ubuntu の構築環境は、VMWare 上の Ubuntu 11.10 64bit を使用しました。


起動までの手順は 3 段階です。(1) (2) VMWare 上の作業、(3) はホストの Windows 環境となります。
(1) ARM Ubuntu SD イメージファイルを作成する。
(2) (1) のイメージファイルから initrd vmlinuz を取り出す。
(3) QEMU の仮想 SD ドライブとして (1) のイメージファイルを使用し、(2) で取り出した initrd vmlinuz で起動する。

参考サイト:Testing with Linux on ARM architecture using QEMU

(1) ARM Ubuntu SD イメージファイルを作成する。

私の環境では、特に設定しなくても、apt-get linaro-image-tools をインストールすることができました。
$ sudo apt-get update
$ sudo apt-get install linaro-image-tools
上記サイトを参考に、ファイルを取得し、Versatile Express 向けの SD イメージファイルを作成します。成功すると、vexpress.img というファイルが作成されます。
$ linaro-media-create --image_file vexpress.img --dev vexpress --binary linaro-natty-nano-tar-20110527-1.tar.gz --hwpack hwpack_linaro-vexpress_20110526-2_armel_supported.tar.gz
途中、何回か質問されますが、全て y と答えました。必要なツール類などが自動的にインストールされるようです。

(2) initrd vmlinuz を取り出す。

イメージファイルを /mnt/tmp 以下にマウントして、/mnt/tmp/boot から、initrd vmlinuz Windows 環境にコピーします。今回は vmlinuz-2.6.38-1003-linaro-vexpress initrd.img-2.6.38-1003-linaro-vexpress をコピーしました。
$ sudo mount -o loop,offset="$(file vexpress.img | awk 'BEGIN { RS=";"; } /partition 2/ { print $7*512; }')" -t auto vexpress.img /mnt/tmp
(3) QEMU の起動

MSYS からの実行は問題があるようなので、Windows のコマンドプロンプトから実行します。(ビルドに使用した MinGW 環境の bin から、QEMU exe と同じフォルダに必要な dll をコピーしておく必要があります。)

(1) で作成した vexpress.img と、(2) で取り出した vmlinuz-2.6.38-1003-linaro-vexpress initrd.img-2.6.38-1003-linaro-vexpress が存在するフォルダで、qemu-system-armw.exe を以下のように実行します。(exe ファイルへの PATH は、適宜読みかえてください。)
qemu-system-arm.exe はコンソールアプリで、armw Windows アプリです。armw の方は、不要なコマンドプロンプトが開きません。
>c:\path\to\qemu-system-armw.exe -M vexpress-a9 -kernel vmlinuz-2.6.38-1003-linaro-vexpress -initrd initrd.img-2.6.38-1003-linaro-vexpress -m 512 -append "root=/dev/mmcblk0p2 vga=normal mem=512M devtmpfs.mount=0 rw" -drive file=vexpress.img,if=sd,cache=writeback

しばらく待つと、プロンプトが出ます。(そのままだと文字が小さいので、ドラッグしてウィンドウを拡大します。)


poweroff で終了すると、自動的に QEMU も終了するようです。

デスクトップ版
Ubuntu も、同じ initrd vmlinuz で起動できました。

http://releases.linaro.org/images/12.03/oneiric/ubuntu-desktop/vexpress-a9-ubuntu-desktop.img.gz 
上記ファイルを展開してできる vexpress-a9-ubuntu-desktop.img を、vexpress.img の代わりに使用するだけです。



動作は遅いですが、x86 Ubuntu と同様に、Firefox でウェブを見たり、GUI からアップデートを行ったりができます。 
 
 

0 件のコメント:

コメントを投稿