RaspberryPiをVMで動かせないか。

毎度、できるかなシリーズと化していますが、Raspberry Pi を実機ではなくVMで動作させるにはどうしたらいい?ということで少し頑張ってみました。

今回、動作させる環境はこちら。

実機マシン:Intel(R) Core i3 CPU M 370 @ 2.40GHz × 4
OS:Debian 10.4 buster x86_86
MEM:8GB

Raspberry Piはarmアーキテクチャで動作するraspbian(debian系Linux)ですので、まずはarmアーキテクチャを動作させるため下記を用意します。

・libvirt-manager
・qemu-system-arm

Debian x86_64へのインストールは下記の通り。


$ sudo apt install virt-manager qemu-sysytem-arm

aptだのyumだのdnfなので迷いますが、やることは一緒です。
ただ現時点で、Centos8のqemu-system-arm はソースから入れないとパッケージはなさそうですね。

次に、下記を準備します。

[raspbian ディスクイメージ]
https://www.raspberrypi.org/downloads/raspbian/
→ 2020-02-13-raspbian-buster-full.img あたりをダウンロードします。

[qemu用カーネル、dtイメージ]
https://github.com/dhruvvyas90/qemu-rpi-kernel
→ kernel-qemu-4.19.50-buster
→ versatile-pb-buster.dtb あたりをダウンロードします。

あとは、 https://github.com/dhruvvyas90/qemu-rpi-kernel にもあるとおり、libvirtへ下記のxmlを作成してあげればVMとして登録できます。
/var/lib/libvirt/images あたりにダウンロードしたファイルを入れておくとVMとして起動します。


virt-install \
--name raspi-arm \
--arch armv6l \
--machine versatilepb \
--cpu arm1176 \
--vcpus 1 \
--memory 256 \
--import \
--disk /var/lib/libvirt/images/2020-02-13-raspbian-buster-full.img,format=raw,bus=virtio \
--network user,model=virtio \
--video vga \
--graphics spice \
--rng device=/dev/urandom,model=virtio \
--boot 'dtb=/var/lib/libvirt/images/versatile-pb-buster.dtb,kernel=/var/lib/libvirt/images/kernel-qemu-4.19.50-buster,kernel_args=root=/dev/vda2 panic=1' \
--events on_reboot=destroy

とりあえず、起動できるとこんな感じでした。ラズベリーロゴがいい感じです。

RaspberryPi起動しました。

ただし、実機と比べるとarmをエミュレートしていることもありまして、webベースのアプリがやっと動作する程度でしょうかね。
動作確認にはいい環境だと思いました。