
こんばんにちは
QEMUではホストとは異なるアーキテクチャのシステムをエミュレートすることができます.
そこで,Windows(x86_64)上にQEMUをインストールし,その上でaarch64(arm64)をエミュレートし,Raspberry Pi OSを動かしてみます.
続きをどうぞ
目次
環境
Host
- Windows 10 Pro ver.2004 build 19041
- QEMU 5.1.0
- WSL2
- Ubuntu 20.04.1 LTS (Focal Fossa)
※ Ubuntuは .img
の操作に使います.
Guest
- Raspberry Pi OS GNU/Linux 10 (buster) arm64 lite
QEMU インストール
通常通りQEMUをインストールします.
ダウンロード
ダウンロードページより, qemu-w64-setup-20200814.exe
をダウンロードします.
インストール
インストールするコンポーネントはデフォルトのまま.
インストール先はデフォルトの C:\Program Files\qemu
としました.
確認
必要ファイルの準備
OS イメージ
現時点でraspberrypi.orgのダウンロードページからは32-bitのイメージしかダウンロードできません.
そこでミラーから探します.
今回はJAISTからダウンロードします.
Index of /pub/raspberrypi/raspios_lite_arm64/images/raspios_lite_arm64-2020-08-24
kernelとdtb
起動に必要なファイルをイメージから取り出します.
guestfish
コマンドは libguestfs-tools
パッケージに入ってます.
仮想ディスク
ダウンロードした .img
ファイルからそのまま起動できるのですが,今回は別に仮想ディスクを用意します.
raw
からqcow2
に変換- 仮想的なサイズを
16G
にリサイズ(ディスク上のサイズは変化しません)
ネットワーク準備
今回はホストにtapインターフェースを用意して,それに接続し,ホストにNATさせます.
TAP-Windows
ダウンロード
Windowsにtapデバイスを追加するのに, TAP-Windows
というソフトウェアをインストールします.本来はOpenVPNのインストーラーに同梱されているようですが,単体でも問題なく使用できました.
現時点での最新が 9.24.2 2020/02/20
でした.
インストール
インストールするコンポーネントは TAP Virtual Ethernet Adapter
のみで大丈夫です.
名前変更
環境によりますが, イーサネット 2
などの名称で TAP-Windows Adapter V9
のネットワークアダプターが追加されます.
指定しやすくするために イーサネット 2
を tap0
等の任意の名称に変更しておきます.
IPアドレス指定
tap0
のv4アドレスを設定します.
今回は 10.20.30.1/24
としました.
Nat 設定
管理者権限でPowershellを起動します.
-Name
は任意です.-InternalIPInterfaceAddressPrefix
はtap0
に割り当てたアドレスです.
起動
起動
以下のコマンドで起動します.
QEMUのウィンドウが出現し,ズラーッとテキストが流れ,ログインプロンプトが表示されます.
ログイン
通常通りログインします.
- username: pi
- password: raspberry
確認
Raspberry Pi OS といってもほぼDebianです.
ファイルシステムリサイズ
通常ならば初回起動時にファイルシステムが自動的にリサイズされるようになっているのですが,起動時に指定していないのでリサイズさせます.
powershellからだと表示が崩れるので,QEMUのウィンドウで作業します.
再起動します.
が,私の環境ではうまく再起動ができなくて, [ xxxx.xxxxxx] reboot: Restarting system
で止まってしまうので,QEMUのウィンドウを閉じるかpowershellで Ctrl+c
で終了させ,改めて起動します.
IPアドレス指定
通常通り指定します.
再起動なりして反映します.
既知の未解決問題
パワーオフや再起動ができません.
reboot
は [ xxxx.xxxxxx] reboot: Restarting system
で止まるし,
shutdown -h now
は最後にカーネルパニックになります.
halt
ならカーネルパニックは起きませんが,結局 Ctrl+c
なりで終了させる必要があります.
オフ時はいいとしても,再起動が出来ないのが少し不便ですね...改善方法は現時点では不明です.
余談
デスクトップ環境
今回はliteを用いましたが,起動時のオプションに -device usb-mouse
を追加してポインタデバイスを接続することで,デスクトップ環境も使えるようです.(未検証)
ネットワークのブリッジ接続
今回はホストにNATさせていますが, tap0
を任意のネットワークアダプターとブリッジ接続し,適切にIPアドレス等を設定すればホストと同じサブネットに接続できます.(未検証)
QEMU on Linux
今回はWindowsにインストールしたQEMUで起動していますが,QEMUが動けば何でも良いので,もちろんLinux上のQEMUでも同様のことが出来ます.
たとえば,WSL2にQEMUをインストールして,raspiosを起動できます.
ネットワーク周りは環境に合わせて変更する必要があります.
QEMUのウィンドウ
起動時のオプションに -display none
を追加すれば,ウィンドウが出てこなくなります.
参考サイト
- Windows で Raspbian システムを起動(QEMU, qemu-rpi-kernel を使用)
- dhruvvyas90/qemu-rpi-kernel: Qemu kernel for emulating Rpi on QEMU
- QEMU System Emulation User’s Guide — QEMU 5.0.92 (v5.1.0-rc2) documentation
- QEMUのRaspberry Pi 3モデルでUSBホストエミュレーション – Qiita
- guestfish (libguestfs-tools)を使う – Qiita
- オープンギャラリー:QEMUブリッジネットワーク接続環境(QEMU on Windows編)
- Windows版QEMUにTAP-driverをインストールしてみた。 – Qiita
- 仮想MacアドレスのベンダーID – うまいぼうぶろぐ
- NAT ネットワークのセットアップ | Microsoft Docs
- Linuxでの32bit/64bitの確認方法(CPU、カーネルのBit数) | ぱーくん plus idea