WindowsでQEMUとqemu-rpi-kernelを使いRaspberry Pi OSを実行する方法
【目次】
この資料の対象とエミュレーション方式の前提
本ガイドは、Windowsパソコン上でQEMU(Quick Emulator、異なるCPUアーキテクチャをソフトウェアで再現するオープンソースのエミュレータ)を使い、Raspberry Pi OS(旧称Raspbian、Debianベースのlinuxシステム)を動かす手順を解説する。Raspberry Pi実機を用意せずに、ARM向けアプリケーションの開発・テストやlinuxの学習に活用できる。
Raspberry Pi OSはARM(Advanced RISC Machine)プロセッサ上で動作する。一般的なWindowsパソコンのx86/x64系プロセッサとは命令セットが異なるため、QEMUでプロセッサのエミュレーションを行う。
本ガイドが採用するのは、versatilepb方式(QEMU向けに調整されたカーネルとデバイスツリーを使い、QEMUの「versatilepb」マシンとしてRaspberry Pi OSを起動する方式)である。この方式には次の制約がある。CPUはarm1176(Raspberry Pi 1相当)に固定され、割り当てメモリは256MBが上限となる。そのため標準のデスクトップ版ではなく、コマンドライン操作中心のLite版イメージを用いる(デスクトップ版はこの構成では実用的に動作しないため)。
前提条件:Windowsパソコンが使用可能であり、インターネット接続が確保されていること。
QEMU Binaries for Windowsのインストール
- QEMU Binaries for Windowsの公式ページにアクセスする。
- 最新版のインストーラー(qemu-w64-setup-<バージョン>.exe)をダウンロードする。
- ダウンロードしたインストーラーを実行する。
- インストールウィザードが起動したら「Next」をクリックして進める。
- ライセンス条項を確認し、同意する場合は次へ進む。
- コンポーネントの選択画面では、既定のまま「Next」をクリックする。
- インストール先フォルダも既定のまま「Install」をクリックする。
- インストールが進行する。
- インストール完了を確認する。既定のインストール先はC:\Program Files\qemuである。
QEMU用エミュレーションカーネルとデバイスツリーの入手
QEMUのversatilepb方式でRaspberry Pi OSを動かすには、QEMU向けに調整されたカーネルファイルと、デバイスツリーブロブ(.dtb、ハードウェア構成情報をカーネルに伝えるファイル)が必要である。標準のRaspberry Pi OSカーネルはこの方式では起動しない。
- GitHubのdhruvvyas90/qemu-rpi-kernelリポジトリにアクセスする。
- このリポジトリでは、Buster/Stretch対応のkernel-qemu-5.4.51-buster(またはkernel-qemu-4.19.50-buster)が最も新しいカーネルである。本ガイドではこのBuster対応カーネルを使う。最初にカーネルファイルをダウンロードする。
- ファイルページで「Download」をクリックしてダウンロードを開始する。
- ダウンロードしたファイルは、作業用ディレクトリに保存する。以降の手順でも同じディレクトリを使用する。
- リポジトリのトップページに戻る。
- 次に、デバイスツリーブロブをダウンロードする。Buster対応カーネルにはversatile-pb-buster.dtbを使う(5.4.51カーネルを使う場合はリポジトリの指示に従い対応する.dtbを選ぶ)。
- 同様に「Download」をクリックしてダウンロードする。
- このファイルは、先ほどのカーネルファイルと同じディレクトリに保存する。
Raspberry Pi OSイメージのダウンロード
- versatilepb方式は省メモリのため、デスクトップ版ではなくLite版(コマンドライン中心)のイメージを使う。Buster世代のRaspberry Pi OS Lite(armhf)を入手する。
- イメージの.zipファイルを選択する。
- ダウンロードが完了するまで待機する。
- ダウンロードした.zipファイルを展開し、.imgファイルを取り出す。
Windowsでの圧縮ファイル展開には7-Zipが便利である。インストール手順 »
- 展開した.imgファイルは、先ほどのカーネルファイルと同じディレクトリに配置する。
Raspberry Pi OSの起動
- Windowsコマンドプロンプトを起動し、準備したファイルのディレクトリに移動する。dirコマンドで必要なファイル(カーネル、.dtb、.img)が揃っていることを確認する。ファイル名は実際にダウンロードしたものに合わせる。
- 以下のQEMU起動コマンドを実行する。CPUをソフトウェアでエミュレートするため、動作は実機より遅い。
"C:\Program Files\qemu\qemu-system-arm.exe" -M versatilepb -cpu arm1176 -m 256 -kernel kernel-qemu-5.4.51-buster -dtb versatile-pb-buster.dtb -drive "file=raspios-buster-lite.img,if=none,index=0,media=disk,format=raw,id=disk0" -device "virtio-blk-pci,drive=disk0,disable-modern=on,disable-legacy=off" -net "user,hostfwd=tcp::10022-:22" -append "root=/dev/vda2 panic=1 rw" -no-reboot主要なパラメータの説明:
- -M versatilepb:エミュレートするマシンタイプ
- -cpu arm1176:エミュレートするCPUタイプ
- -m 256:割り当てメモリ容量(MB、この方式では上限)
- -kernel:使用するカーネルファイルの指定
- -dtb:デバイスツリーブロブの指定
- -drive / -device:イメージをvirtioディスク(/dev/vda)として接続する指定
- -net "user,hostfwd=tcp::10022-:22":ホストのポート10022をゲストのポート22に転送(SSH接続用)
- セキュリティ警告が表示された場合は、「アクセスを許可する」を選択する。
- 起動が完了すると、コンソールにログインプロンプトが表示される。既定のユーザー名はpi、パスワードはraspberryである(Buster世代の既定値)。
- システムを終了するときは、ログイン後にsudo shutdown -h nowを実行する。
WindowsからのSSHリモートアクセス
この節では、Raspberry Pi OS側でSSHサーバーを有効化し、Windows側からSSH接続する。SSHを使うと、Windowsの端末から直接Raspberry Pi OSを操作でき、コマンドの貼り付けやファイル転送が容易になる。
- QEMUのコンソールでpiユーザーとしてログインする。
- 以下のコマンドを実行し、SSHサーバーを起動してIPアドレスを確認する。
- sudo service ssh start:SSHサーバーの起動
- ip addr:ネットワーク設定の確認
sudo service ssh start ip addr
- Windowsのコマンドプロンプトで「netstat -an」を実行し、ポート10022がLISTEN状態であることを確認する。見つからない場合は、システムの起動またはSSHサーバーの起動に問題がある。
netstat -an
- コマンドプロンプトを管理者権限で起動し、以下のコマンドでファイアウォールを設定する。ポート10022/TCPの通信を許可する。
netsh advfirewall firewall add rule name="raspbian" dir=in protocol=tcp localport=10022 action=allow
- Windows用SSHクライアントであるMobaXTermを起動する。
MobaXTermが未インストールの場合は、公式サイトからMobaXTerm Home Edition(インストーラー版)をダウンロードする。
https://mobaxterm.mobatek.net/
インストール手順はこちらのガイドを参照すること。
- MobaXTermで「Start local terminal」を選択する。
- 以下のSSH接続コマンドを実行する。
ssh -X -p 10022 pi@localhost-XオプションはX11フォワーディングを有効にする(リモート側で実行したGUIアプリケーションの画面を、ローカルのWindowsに転送して表示する機能)。
パスワードはraspberryである。入力時に画面へ文字が表示されないのは正常な動作である。
接続確認のメッセージが表示されたら「Yes」を選択する。
MobaXTermのGUIからも接続が可能である。
- 接続を終了するときは「exit」を実行する。正常に終了すると、MobaXTermのローカル端末に戻る。これでWindowsからのリモートアクセス環境の構築は完了である。
トラブルシューティング
よくある問題と対処:
- QEMUの起動に失敗する場合:
- コマンドラインのパラメータが正しいか確認する
- イメージファイル、カーネルファイル、.dtbファイルが同じディレクトリにあるか確認する
- ファイル名とバージョン番号がコマンドの記述と一致しているか確認する
- rootの指定(root=/dev/vda2)がディスク接続方法と合っているか確認する
- SSH接続に失敗する場合:
- Raspberry Pi OSでsshサービスが起動しているか確認する
- ファイアウォールの設定を再確認する
- ポート10022が他のアプリケーションで使われていないか確認する
- 動作が遅い場合:
- ホストマシンの負荷状況を確認する(versatilepb方式はメモリ上限256MBのため大きくは改善しない)
セキュリティに関する注意事項
開発環境として使う際の推奨事項:
- 初期パスワード「raspberry」は必ず変更すること
- 必要なポート以外は開放しないこと
- 定期的にシステムの更新を行うこと
- 重要なデータを扱う場合は、適切なバックアップを取得すること
応用的な使用方法
本環境の活用例:
- ARM向けアプリケーションの開発とテスト
- Raspberry Pi用プログラムの動作確認
- linuxシステム管理の学習
- ネットワークプログラミングの実践
注意:本ガイドは基本的な環境構築手順を示したものである。実運用にあたっては、セキュリティとパフォーマンスを十分に検討すること。
謝辞:本ガイド作成にあたり、以下の情報源を参考にした。
- Raspberry PiのQEMUエミュレーション解説: https://azeria-labs.com/emulate-raspberry-pi-with-qemu/
- Windows用QEMUバイナリ: https://qemu.weilnetz.de/w64/
- Raspberry Pi用QEMUエミュレーションカーネル: https://github.com/dhruvvyas90/qemu-rpi-kernel