Raspberry Pi は CPU が ARM なので、クロスコンパイラ環境が必須なのですが結構手間なので、エミュレータ環境を使って、その中で Mono や OpenCV をビルドすると良い。
QEMU – Emulating Raspberry Pi the easy way (Linux or Windows!)
http://xecdesign.com/qemu-emulating-raspberry-pi-the-easy-way/
そんな訳で、上記からエミュレータをダウンロードして解凍すると、あっさりと動きます。「QEMU Raspberry Pi」で検索するとぼろぼろと出てくるので、これが定番だったんだ。
■初期環境を作る
Raspberry PiをQEMUでエミュレートする方法 | 意識低い開発者のBlog
http://blog.ymyzk.com/2013/12/raspberry-pi-qemu/
Raspberry Pi のイメージファイルを拡張する | 意識低い開発者のBlog
http://blog.ymyzk.com/2013/12/raspbian-image-resize/
にある手順に従って、
- /etc/ld.so.preload を開いて #/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so のようにコメントアウトする。
qemu-system-arm -kernel kernel-qemu ^
-cpu arm1176 -m 256 -M versatilepb -no-reboot ^
-serial stdio ^
-append "root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash" ^
-hda D:isoRaspberryPi2014-06-20-wheezy-raspbian.img
vi /etc/ld.so.preload
- RasPi のイメージファイルが 2GB 程度なので +16G 程度追加しておく。
qemu-img resize 2014-06-20-wheezy-raspbian.img +16GB
こうすると、ひとまず QEMU 上で Raspberry Pi が動作します。
■ネットワークを構築する
単純にコンパイルするだけならば上記の設定で十分なのですが、今回は apt-get をして Mono や OpenCV の環境を構築するので、外部ネットワークの接続が必須です。これは、TAP 型で外部接続させます。
オープンギャラリー:QEMUゲスト間ネットワーク接続環境
http://www.os-museum.com/qemutapnet/qemutapnet.htm
Windows環境の場合は、
OpenVPN をインストール http://www.openvpn.jp/
- ネットワーク接続の名前を「TAP32」のように設定しやすいものに変更。
- 「ネットワークと共有センター」→「アダプターの設定の変更」で「ブリッジ接続する」
私の環境では Hyper-V が入っているため vEthernet とブリッジしていますが、普通はイーサネット(PCが接続しているLANポート)を使うと思われます。
起動時に -net tap.iframe=TAP32 の様に設定
qemu-system-arm -kernel kernel-qemu ^ -cpu arm1176 -m 1012 -M versatilepb -no-reboot ^ -serial stdio ^ -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" ^ -net nic -net tap,ifname=TAP32 ^ -hda 2014-06-20-wheezy-raspbian.img
■制限
- メモリが -m 256 で 256MB しか設定できません。それ以上を設定しても無視される。QEMU の制限かも
- OpenVPN の接続スピードが 10Mpbs になっている。今となっては相当遅いので、何か別のローカルネットワークの手段を考えたほうがいいかも(方法が分からん)。git などからソースダウンロードすると非常に遅いので、別途 Debian でダウンロードしたものをコピーすると良い。
- 実行速度は、実機とほとんど変わらない。Mono をビルドすると10時間程度かかりました。まあ、ビルドしている間に実機がふさがれるのを防ぐのとバックアップがとりやすい(*.img ファイルそのまま保存すればOK)ので、これはこれで使い勝手がよいかと。
Terrific Article
I very rarely discuss these articles, but
I thought this on deserved a well done you