Raspberry Pi用バイナリをQEMUエミュレータで動かす方法(ユーザーモードエミュレーション)

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の画面も持ってこられます。

後はご自由に。

6 thoughts on “Raspberry Pi用バイナリをQEMUエミュレータで動かす方法(ユーザーモードエミュレーション)

  1. スマホでMathematicaを動かそうとしていますが、うまくいきません。http://oboegaki-no-oboegaki.blogspot.jp/2014_06_01_archive.html
    ネイティブ動くのが魅力的です。Raspbianも動きましたが同じ結果でした。

    • dinosauria123さん

      これはすごいですね。
      ライセンス的には無理なのでしょうが、キージェネレータなどで無理やり動かす人はいそうです。

  2. CPUをfakeできれば動くようなきもしています。
    arm-kvmが動けばもしかして…

  3. 誘惑に負けてkeygenで動かしました。wolframは動きましたがmathematicaは動きませんでした。
    wolframでのベンチマークは0.07でした。
    母機はarm8コアでAntutuが32000ぐらいのスコアのものです。

  4. 詳しく書くと、
    200.0
    9.69 5.23 23.30 16.28 14.81 3.90
    4.51 5.70 32.11 9.39 8.66
    1.77 7.00 29.82 27.80
    でした。

    CPU:MTK6592 32bit 8コア1.66GHz
    メモリ:2GB

    • Wolframはもう少し寛容になってほしいところですが、
      ビジネスがうまくいかなくなっては困るので、
      難しいところですね。

コメントは停止中です。