Raspberry pi（Raspbian Jessie）を OS X の QEMU で動かす

OS X　で Raspbian Jessie を動かす手順のメモです。

# 目的
Raspberry Pi の動作環境を手持ちの MacBookAir で構築するため作業しました。

# 手順

### QEMU のインストール

OS Xでターミナルを開き、下記コマンドで QEMU をインストールします。
`$ brew install qemu`

### Raspbian エミュレート用の QEMU カーネルのダウンロード

[Raspbian エミュレート用の QEMU カーネルのページ](https://github.com/dhruvvyas90/qemu-rpi-kernel) から最新の kernel-qemu-4.x.xx-jessie をダウンロードします。ダウンロードしたファイルを適当なディレクトリを作って保存します。

ここでは、 kernel-qemu-4.4.13-jessie をダウンロードし、 /raspbian というディレクトリを作成し保存しました。

### Raspbian Jessie の OS イメージのダウンロード

[Raspbian Jessie の OS イメージのダウンロードページ](https://www.raspberrypi.org/downloads/raspbian/) から OS イメージをダウンロードします。

ここでは、 RASPBIAN JESSIE WITH PIXEL（2017-01-09-raspbian-jessie.img） をダウンロード展開し、そのファイルを上記 /raspbian に保存しました。

### Raspbian Jessie の OS イメージの編集

VirtualBox+Vagrant利用環境が既に構築済みであると仮定し、そちらでRaspbian Jessie の OS イメージの編集を構築していきます。ターミナルを開いて下記コマンドを実行します。

`
$ cd /raspbian
$ vagrant init ubuntu/trusty64
$ vagrant up
$ vagrant ssh
`

別途起動したターミナル上で、下記コマンドでマウントの際に利用する Raspbian Jessie の OS イメージの offset 値を計算します。ここでは offset 値は 70254592 だったのでその値を使います。詳細は [こちら](https://www.raspberrypi.org/forums/viewtopic.php?t=138128&p=929767) を参考。

`$ fdisk -l /vagrant/2017-01-09-raspbian-jessie.img`

次のコマンドで Raspbian Jessie の OS イメージをマウントします。

`$ sudo mount -v -o offset=70254592 -t ext4 /vagrant/2017-01-09-raspbian-jessie.img /mnt/`

マウント後、下記コマンドでファイル編集します。この辺は [こちらの記事](http://qiita.com/u6k/items/af43ab9a4326586b9071) と同じです。

`$ sudo vi /mnt/etc/ld.so.preload`
`
/usr/lib/arm-linux-gnueabihf/libarmmem.so
↓
 #/usr/lib/arm-linux-gnueabihf/libarmmem.so
`

同様に

`$ sudo vi /mnt/etc/fstab`
`
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
↓
 #/dev/mmcblk0p1  /boot           vfat    defaults          0       2
 #/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
`

これで exit して OS イメージの編集を終えます。

`$ exit`

### QEMU で Raspbian Jessie を起動する

下記コマンドで Raspbian Jessie 起動します。

`$ qemu-system-arm -kernel kernel-qemu-4.4.13-jessie -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1" -hda 2017-01-09-raspbian-jessie.img -redir tcp:10022::22 -redir tcp:15901::5901`

上記コマンドで別途ターミナルが開き Raspbian が起動しますが、 apt-get で構成管理をしようとした際に書き込み権限がないというエラーで弾かれてしまうため、リマウントします。エラー原因については [こちら](http://unix.stackexchange.com/questions/46628/not-able-to-lock-var-lib-dpkg-lock-read-only) を参考。

`$ sudo mount / -o remount,rw`

リマウントしてしばらくすると Raspbian Jessie のログイン画面が現れるため、 pi ユーザーでパスワード（デフォルトだと raspbian）を入力しログインします。すると次のOS画面が現れ、ターミナルを起動し apt-get 等でインストール可能になっている点も確認できます。これでエミュレータとして最低限の利用が可能と思います。

![スクリーンショット 2017-01-12 15.14.02.png](https://qiita-image-store.s3.amazonaws.com/0/92806/6b985484-a1df-8fb1-116c-93f7a296a04a.png)

### 課題
上記手順では初代の Raspberry Pi をエミュレートしているため、起動含め全てがもっさりしています。Raspberry Pi2, 3 も利用できるのか、エミュレータとしての限界は別途利用してみて探ってく必要があります。

### 参考
下記以外もトラブルシューティング等色々なページを参考にしました。

[Raspberry piをエミュレートする（Mac / QEMU / Raspbian）](http://qiita.com/keita1987/items/f943b380a02e5ad67274)
[QEMU for windowsでRaspbian Jessieを動作させる](http://qiita.com/u6k/items/af43ab9a4326586b9071)
[Ubuntu上のエミュレータ（QEMU）で動作するRaspbian](http://blog.unfindable.net/archives/6834)
[WindowsでRaspbian Jessieをエミュレートしてみた](https://www.aozorawaon.com/?p=215)