Mathematicaが無料になって以来、Raspberry Piを触る機会が増えました。Raspberry Piの良さは、各種センサーを比較的容易に使えることにあり、そういうことをしないなら、Raspberry Piはあまりいいハードウェアではありません。メモリはたった512MBしかなく、CPUは32ビットのARM、そのクロックは700MHzと低速です。
実験のために、Raspberry Pi用のバイナリを動かしたいことがあるのですが、この性能の低さに憂鬱になります。インテル入ってるのPCは、Raspberry Piよりはるかに高性能なので、Raspberry Pi用のバイナリをRaspberry Pi上ではなくPC上で動かせればいいのですが、CPUが違うので、Raspberry Pi、つまりARM用のバイナリを、インテルのCPUでそのまま動かすことはできません。
そこで、QEMUでエミュレートすることを考えます。QEMUのエミュレーションには、システム全体をエミュレートする方法と、ユーザーモードだけをエミュレートする方法があります。
以前紹介した方法(Windowsの場合・Ubuntuの場合)は、システム全体をエミュレートする方法です。比較的高性能なPCなら、システム全体をエミュレートしても、実機と同程度の性能を発揮できます(メモリが256MBという問題がありましたが)。
ここではユーザーモードをエミュレートする方法を紹介します。この方法には、システム全体をエミュレートするよりも軽く、使えるメモリも多い(ホストに十分なメモリがあれば)というメリットがあります。
Ubuntuで試します。
まず、Raspbianのイメージをダウンロードします。2013-12-24以降がいいでしょう。
wget http://downloads.raspberrypi.org/raspbian/images/raspbian-2014-01-09/2014-01-07-wheezy-raspbian.zip
「fdisk -l 2014-01-07-wheezy-raspbian.img
」などとして、2番目のパーティションの始点を調べます(2014-01-07-wheezy-raspbian.imgの場合は122880です)。これに512をかけた結果(62914560)を後で使います。
qemu-user-staticをインストールし、作業用ディレクトリを作ります(この作業は1回だけやればいいです)。
sudo apt-get install qemu-user-static mkdir rootfs
イメージをマウントします。
sudo mount -o offset=62914560 2014-01-07-wheezy-raspbian.img rootfs
エミュレーション環境を整えます(この作業は1回だけやればいいです)。
sudo cp /usr/bin/qemu-arm-static rootfs/usr/bin/ sudo sed -i 's/^/#/' rootfs/etc/ld.so.preload
エミュレーションを開始します。
sudo QEMU_CPU=arm1176 chroot rootfs
qemu-arm-staticがデフォルトでエミュレートするアーキテクチャはARMV7lですが、Raspberry PiはARMV6l(CPUはARM1176)なので、環境変数をそのように設定しています(arm1176
の代わりにarm11mpcore
とすればマルチコアになります)。事前に「xhost local:localhost
」とすればXの画面も持ってこられます。
後はご自由に。
Wolfram Cloud(https://t.co/OXD06DFhiu )のFree版、計算時間の制限はかなり厳しい。Raspberry Piも遅いし、Poor Man’s Mathematicaは依然として、http://t.co/fJnM9JYBy6 がベストか。
— Taro YABUKI (@yabuki) 2014, 6月 29