Armadillo-220 用の romfs.img.gz を qemu で動かす
出張中でも Armadillo の開発がしたい!
でも、ただでさえコンピュータ2、3台を持って行っている身としては、これ以上 Armadillo とかも鞄に忍ばせたくはない・・・
そこで、ARM CPU もエミュレーションできる QEMU を使って、それっぽく Armadillo-220 用の romfs を動かしてみました。
※ この記事は完全な Armadillo のエミュレーションを行うものではありません
QEMU インストール
まずは、QEMU をインストールします。
MacOS X Snow Leopard
$ sudo port install qemu +target_arm
Debian GNU/Linux 5.0.4 (lenny)
# apt-get install qemu
起動するカーネルのダウンロード
こちらのサイトで起動するイメージを公開してくださっています。
http://people.debian.org/~aurel32/qemu/arm/
$ wget http://people.debian.org/~aurel32/qemu/arm/vmlinuz-2.6.18-6-versatile
romfs の作り直し
Armadillo はシリアルポートのデバイス名が ttyAM0 ですが、上記のカーネルは ttyAMA0 です。
このままだと起動してもコンソールがなく、何もできないので romfs のイメージをループバックファイルシステムでマウントして、ちょっといじります。
::respawn:/sbin/getty -L 115200 ttyAM0 vt102
# gunzip romfs.img.gz
# mount -o loop romfs.img /mnt
# vi /mnt/etc/inittab
〜編集〜
# vi /mnt/etc/securetty
〜編集〜
# sync
# umount /mnt
::respawn:/sbin/getty -L 115200 ttyAM1 vt102
↓
::respawn:/sbin/getty -L 115200 console vt102
::respawn:/sbin/getty -L 115200 ttyAM0 vt102
::respawn:/sbin/getty -L 115200 ttyAM1 vt102
ttyAM0
ttyAM1
tty1
↓
console
ttyAM0
ttyAM1
tty1
起動
MacOS X Snow Leopard
$ sudo /opt/local/bin/qemu-system-arm -M versatilepb -cpu arm926 -m 32 -smp 1 -usb -kernel vmlinuz-2.6.18-6-versatile -append "ramdisk_size=12288 root=/dev/ram0 console=ttyAMA0" -initrd romfs.img -serial stdio
Debian GNU/Linux 5.0.4 (lenny)
# qemu-system-arm -M versatilepb -cpu arm926 -m 32 -smp 1 -usb -kernel vmlinuz-2.6.18-6-versatile -append "ramdisk_size=12288 root=/dev/ram0 console=ttyAMA0" -initrd romfs.img -serial stdio
Armadillo用のカーネルではないので、微妙な動作の違いなどはあるでしょうけど、
(一番大きいのが flatfsd が使えない点だが、-mtdblock オプションを使えばなんとかなるかも?)
ほぼそのままの形の romfs がエミュレータ上で動くと言うことは、
(シリアルコンソールが必要なく、ネットワークアクセスのみであれば、一切変更不要。)
手元に Armadillo本体が無い場合、
いろいろなテストを行い場合に結構有益なのではないでしょうか。