macOSでQEMUを使ってRaspbianを起動する

Box86というエミュレータを使うと、ARMのCPUでもWineが使えるらしいという情報をキャッチしたので、Raspberry Piで試そうと思ったものの、SDカードが壊れてたので使おうと思ったのが、QEMU

x86なOSなどで、他のCPUアーキテクチャのエミュレーションを行ってくれる便利な汎用エミュレータで、Linux, Windows, macOS用にリリースされています。今回はこれでRaspberry PiのOSであるRaspbianをエミュレーションしてみようと思います。

今回使用するアプリ等

macOS BigSurですが、CPUはx86です。QEMUを使ってARMのCPUをエミュレーションして、Raspbianを動作させるのが目的です。Qemu自体はARM, PowerPC, SPARCなど多彩なCPUへエミュレーションしてくれます。

図:見事にRaspbianが動いてます

インストール

Qemu自体のインストール

Qemu自体はコンソールアプリケーションなので、GUIを持ち合わせていません。macOSの場合は、ターミナルからHomebrewを利用してインストールを行います。事前に、Homebrewをインストールしておきましょう。

インストールは簡単で、ターミナルを起動して、以下のコマンドを実行するだけです。

但し素のqemuはmacOSのHypervisor.frameworkに対応していない為、-accel hvfオプションを指定してハイパーバイザ支援が使えません。このqemuにパッチを当てたものをリリースされています。そちらを利用する場合には、以下のコマンドでインストールします(raspi3の場合使えないですが)。

様々なコマンド類がインストールされるため、完了するには結構時間が掛かります。バージョンの確認は

といった感じでバージョンを確認できます。

図:v6.0が入ってるのを確認

Raspbianの用意

Raspbianはインストールではなく、通常はImagerを使ってMicroSDカードに焼き付けるのでインストール作業は無いのですが、イメージファイルから色々と取り出したり、イメージファイル自体をMicroSDの代わりに読み書き出来るようにする必要があるため、作業が必要です。

今回はRaspberry Pi3用のイメージを使用します(今現在、まだQemuではRaspberry Pi4の再現はできないようで。ただ、CPUとしてはcortex-a72には対応しているようなので、パラメータの指定次第では動くのかもしれません。

  1. raspi3というフォルダを作っておきます。
  2. Raspberry Pi3 のRaspbianイメージは、こちらにあり、2020-08-20-raspios-buster-arm64.zipというファイルをダウンロード
  3.  2.のファイルを解凍して、2020-08-20-raspios-buster-arm64.imgというファイルを1.に格納しておく
  4. 3.のファイルをダブルクリックしてマウントする(ちなみに、imgファイルはWindowsでは7zipで開けます)
  5. 4.の中から、「kernel8.img」および「bcm2710-rpi-3-b.dtb」というファイルを1.にコピーしておく
  6. ターミナルより、1.の中に入り、qemu-img resize 2020-08-20-raspios-buster-arm64.img 8Gと入力し、imgファイルのリサイズを行う。2のべき乗サイズでなければならないので、4GBや8GBの指定でなければなりません。

図:ファイルの準備はこれでOK

起動用のコマンドを組み立てる

WindowsやLinuxでは、QEMUのフロントエンドプログラムがあったりするのですが、macOSはQ Emulatorというフロントエンドがあったのですが、現在はUTMというのがあるくらいで、基本はコマンドラインからの起動になります(UTMでの起動方法がよくわからなかった・・・)。

テキストエディタで、以下のようなコマンドのシェルスクリプトファイルを作成し、保存しておきます。毎回起動する時に、このコマンドを入れるのはキツイので、shファイルにしておいてターミナルから実行するようにします。

※audioデバイスは未対応のようです。

  • -M raspi3で、Raspberry Pi3のボードを指定しています。
  • -m 1024でメモリを1GB指定。実機以上のメモリは割当られないので注意。
  • -kernelにて取り出したkernel8.imgを指定しています。
  • -dtbにて、取り出したbcm2710-rpi-3-b.dtbを指定しています。
  • -driveにて、解凍したraspbianのimgファイルを指定しています。formatはrawを指定
  • -appendは起動オプション。fb.fbwidt、fb.fbheightで画面サイズを指定します。

今回はRaspberry Pi3なので、qemu-system-aarch64で起動させていますが、Raspberry Pi2の場合は、qemu-system-armで起動させます。これはCPUのアーキテクチャが異なる為。

起動してみる

ブートさせてみる

作成しておいたシェルスクリプトを叩けば良いのですが、そのままだとpermission deniedになるので、chmod 777 raspi3.shといった感じで、実行権限を加えておきましょう。

起動すぐにRaspbianのあの画面が出てきます。4コアで認識されております。GUIが表示されるまでかなり時間が掛かります。

起動完了すると初回のみセットアップとして

  1. 国の指定(japaneseを指定する)
  2. piアカウントのパスワードの指定を行う
  3. setup screenは特に何もしないで次に進む
  4. エミュレータを使ってるので、無線LANのAPの指定はありません。そのままネットワークに接続可能。

表向きはこれでセットアップはおしまいですが、実際には事項のセットアップがエミュレータ使用の場合は必要になります。シャットダウンや再起動をすると素のqemuだと何故かkernel panicで死んだりしましたが、qemu-virglの場合は適正にシャットダウンできたので、qemu-virglのほうが良いかもしれません(Hypervisor支援で少し処理が早い?)。

図:起動途中の様子

Raspbianの特別なセットアップ

事前準備で、imgファイルの拡張は行っていますがファイルシステムは元のサイズのまま。また、スワップの指定などがまだ無い状態なので、この2つをセットアップしておく必要があります。

  1. ターミナルを起動する
  2. sudo raspi-config --expand-rootfsで、ファイルシステムをimgのサイズまで拡張します。
  3. sudo nano /etc/dphys-swapfileを実行して、nanoで設定ファイルを開く
  4. CONF_SWAPSIZEの項目を2048に書き換える。Ctrl+xで終了し、Yで上書き保存します。
  5. 以下のコマンドを実行して完了する
  6. 再起動して、その後sudo apt updateを実行して、アプデを行っておく

図:swapファイルのサイズを広げておく

関連リンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)