QEMUでARM環境を手にいれる

はじめに

組込みによく用いられているのがARMシリーズである。組込みに特化しているだけあって、低消費電力で動作するが、思いのほか高性能である。ルータやNASといったデジタル周辺機器に、ARMが多く採用されている理由はおそらくこれであろう。

さて、ARM機器に関するソフトウェア開発を行いたい場合や、ルータ・NASなどのARM搭載周辺機器をハックしたい場合には、ARMの環境を用意する必要がある場合がほとんどである。開発用ハードを用いるのが主流であろうが、お財布との相談をしなければならない。

そこで、本稿では、PC上にバーチャルのARM環境を構築する方法を解説する。また、その上でLinuxを動作させるまでも、あわせて説明する。

用意するもの

本稿では、基本的にLinux搭載PCがあればよい。筆者は以下の環境を用意した。

  • HP社製 ML110G5 (Ubuntu 10.04 LTS)

LinuxデストリビューションはUbuntu 10.04 LTSを選択したが、そのほかのデストリビューションでもよい(と思う)。Ubuntu 10.04 LTSを選択した理由は、パッケージとして用意されているQEMUのバージョンが0.10.0以上であったからである。

QEMUのインストール

仮想環境を構築する。今回はARM環境をエミュレートできるQEMUを利用する。

Ubuntu 10.04 LTSの場合は、apt-getでインストールできる。2010年10月時点でのQEMUのバージョンは0.12.3である。

$sudo apt-get install qemu
$sudo apt-get install qemu-kvm-extras

なお、QEMUのバージョンは0.10.0以上を用意する必要がある。そのほかのデストリビューションを使用する場合は注意が必要である(CentOS 5.4で用意されているパッケージはバージョンが0.9.1であった。Debianはたぶん大丈夫)。

QEMUのためのネットワーク設定

QEMUはデフォルトの状態では、ホストPCとバーチャル環境の間に、独自のネットワークを作るため、バーチャル環境から外のネットワークに出ることができない。そこで、ブリッジ接続の設定を行う必要がある。

/etc/network/interfacesを以下のように編集する。

auto lo
iface lo inet loopback
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_maxwait 1

上記では、DHCPでIPを割り振ってもらう設定になっているが、IP固定したい場合は、固定用の設定をする。

次に、/etc/qemu-ifup を以下のように編集する。

#!/bin/sh
echo "Executing /etc/qemu-ifup"
sudo /sbin/ifconfig $1 0.0.0.0 promisc up
echo "Adding $1 to br0..."
sudo /usr/sbin/brctl addif br0 $1
sleep 3
#switch=$(/sbin/ip route list | awk '/^default / { print $5 }')
#/sbin/ifconfig $1 0.0.0.0 up
#/usr/sbin/brctl addif ${switch} $1

最後に、/etc/qemu-ifdown を以下のように編集する。

#!/bin/sh
# NOTE: This script is intended to run in conjunction with qemu-ifup
#       which uses the same logic to find your bridge/switch
sudo /usr/sbin/brctl delif br0 $1
sudo /sbin/ifconfig $1 down
#switch=$(/sbin/ip route list | awk '/^default / { print $5 }')
#/usr/sbin/brctl delif $switch $1
#/sbin/ifconfig $1 0.0.0.0 down

あとはnetworkingを再起動する。

sudo /etc/init.d/networking restart

QEMU用イメージファイルをダウンロードする

QEMU上で動かすLinuxイメージをダウンロードする。Debian lennyのarmelイメージが提供されているのでそれを利用する。

http://people.debian.org/~aurel32/qemu/armel/

にあるファイルをダウンロードする。2010年10月時点でのファイルは以下の通りであった。

  • debian_lenny_armel.qcow2
  • debian_lenny_armel_small.qcow2
  • initrd.img-2.6.26-1-versatile
  • vmlinuz-2.6.26-1-versatile

QEMUの起動

準備は以上である。あとは、QEMUでDebian lenny for armel イメージを起動させるだけである。

以下のコマンドを実行すると、QEMUのウィンドウが起動する。

$sudo qemu-system-arm -M versatilepb -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” -net nic -net tap,ifname=tap0 -m 256 -vga cirrus

以下の図がQEMU上で起動中のDebian lenny for armel である。起動にはかなり時間がかかるので、気長に待ってほしい。デフォルトのログインは、rootユーザーのパスワードが「root」と設定されている。

参考

広告