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)もマウントできるのではないかと思います。
備忘録ここまで。