やりたいこと
WSL※環境でQEMUとホストOS間でL2レベルの通信を可能にしたい.
※WSL1/WSL2どちらでもよい.
試行錯誤して実現できたこと
Windows版のQEMUをWSL1上で実行し,ホストOS とゲスト OS 間で ping できた.
環境情報
- ホスト OS
- Windows10 home
- QEMU
- Windows 版 QEMU
- https://qemu.weilnetz.de/w64/
- 上記のから以下をダウンロードしインストール.
- qemu-w64-setup-20210810.exe
- 補足:WSL1/ubuntuからアクセスしやすくするために,
/mnt/c/qemu
にインストール.
- ネットワークインタフェース
- Windows 版 TAPインタフェース
- https://openvpn.net/community-downloads/
- 上記のから以下をダウンロードしインストール.
- Windows 64-bit MSI installer
- インストール後のTAPインタフェース作成手順は以下を参照
- https://blog.k-san.info/raspios-arm64-on-qemu-on-win#%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E6%BA%96%E5%82%99
- ゲスト OS
- Qemu kernel for emulating Rpi on QEMU
* https://github.com/dhruvvyas90/qemu-rpi-kernel
* 上記から以下をダウンロード
* kernel-qemu-4.19.50-buster
* versatile-pb.dtb - イメージファイル
* http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/raspbian-2019-07-12/
* 上記から以下をダウンロードし,解凍(2019-07-10-raspbian-buster.img).
* 2019-07-10-raspbian-buster.zip
QEMU実行手順
ダウンロードしたファイルを配置する.
$ ls /mnt/c/project/qemu/
2019-07-10-raspbian-buster.img
kernel-qemu-4.19.50-buster
versatile-pb.dtb
qemu を起動する
/mnt/c/qemu/qemu-system-arm.exe \
-M versatilepb \
-cpu arm1176 \
-m 256 \
-net tap,ifname=tap0 -net nic \
-hda 2019-07-10-raspbian-buster.img \
-serial stdio -usb -device usb-kbd \
-dtb versatile-pb.dtb \
-kernel kernel-qemu-4.19.50-buster \
-append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" \
-no-reboot
以上で,デモ動画にあるような感じでホストOS/ゲストOS間でpingできるようになりました.
起動後,ログイン用のプロンプトが出ますが,以下で入れます.
username: pi
password: raspberry
なお,ゲストOSのIPアドレス設定は,以下の記事の内容に従って設定しました.
補足
Windows10のセキュリティ設定でICMPの受信を有効化しないと,ゲストOSからホストOSへpingが通りません.この場合の対処方法は以下を参照ください.
実現できなかったこと
現時点(2021/08/21)では,WSL/Ubuntu版のQEMUはだめでした.
下記の記事にある通り,WSL2でKVMが利用できれば実現できるはずなのですが,自分の環境では再現できませんでした...