[備忘録] QEMU で Raspbian を動かす

(更新

Just a memorandum.  Running Raspbian on QEMU.

昨日の続きで、Raspbian OS を QEMU(エミュレータ)上で動かしてみました。この関連情報はネット上にいくらでもありますので、私の作業の備忘録として御理解ください。

QEMU を用意

まず最初に QEMU を用意します。私は Mac OS (10.11.6 El Capitan) を使ってますので、Homebrew でインストールしました。バージョンは、2.11.1 です。

Raspbian OS のイメージを用意

次に、Raspbian OS のイメージを用意します。私は、2019-04-08 版の Stretch Lite を用意しました。

修正版カーネルと .dtb ファイルを用意

さて、ここからが問題です。ここのサイトを拝見すると、QEMU の rpi3 エミュレーションにはいくつか問題があるそうで、代わりに Arm Versatile ボードのエミュレーションを使うのが良さそうです。

次に、上記エミュレーションでは Raspbarry Pi 用のカーネルは動かないので、修正版のカーネルと .dtb ファイルが必要とのことでした。こちらの方が、GitHub で公開の上、詳しく説明してくださっています。

さて実行

ここまでくれば、あとは簡単です。上述のサイトにあるようなオプションで qemu-system-arm コマンドを起動します。外部から ssh でログインするには、ホストの localhost、ポート 5022 番に ssh します。(コマンドラインオプション

-net user,hostfwd=tcp::5022-:22

を指定した場合。)

また、コンソール出力をホスト OS の tty に出力したい場合は、

-serial stdio

オプションを付けると良いようです。

無事に起動しました。

.img ファイルが壊れた(を壊した)場合など

.img ファイルは SD カードと同じで、起動後はどんどん書き換わっていきますので、オリジナルを残しておいたほうが良いでしょう。(いろいろ実験したあと、簡単に復元できるように。)

また、.img ファイル中の Linux パーティションを他の Linux からマウントしたい場合があるかも知れません。その場合は、まず .img ファイルを fdisk コマンドで覗き、Linux パーティションの位置(オフセット)を確認します。私のイメージの場合、スタートが  98304(セクタ)とありましたので、この値を 512倍し、

# mkdir -p /mnt/image
# mount -o loop,offset=50331648 どこか/2019-04-08-raspbian-stretch-lite.img /mnt/image

のようにするとマウントできます。試していませんが、同様に boot パーティション(FAT32L)もマウントできるのではないかと思います。

備忘録ここまで。