# Raspberry Piで使ってたSDカードはQEMUで動かせるのか

# はじめに

先日の記事で軽く触れたけど家に置いてあるRaspberry Pi (Model B Rev.2)のRaspbianがEOLを迎えたので更新することにした。それでもちろんバックアップとかを取ったんだけどその際SDカードを常用してるマシンで読み書きできれば色々捗るのでは?と思いやり方やら色々調べた記録。

結論としては起動はしたけどデータのやり取りは上手く行かなかった。あと普通にシステムが破損してもおかしくないと思うので真似する人が万が一いても自己責任で。

(2020/11/12 追記)ネットワーク設定を変えたら上手くいったので追記。

# 準備

ホスト環境: Manjaro Linux (x86_64)

SDカードに焼いてある環境: Raspbian 8 (armv6)

まずそもそもARMをx86_64で動かしたいのでなんにしてもQEMU (opens new window)は必須である。

pacman -S qemu qemu-extra-arch

更にQEMU用にLinux kernelを用意するらしいんだけどこれはraspi向けにビルドして公開してくれている人がいるらしいのでそれを使う。

GitHub - dhruvvyas90/qemu-rpi-kernel: Qemu kernel for emulating Rpi on QEMU (opens new window)

Raspbian 8はDebian 8 jessieに対応してるはずなので kernel-qemu-4.4.34-jessieを使えば良い…はず。

# 起動

とは言っても先のリポジトリのwiki (opens new window)に従ってやるだけである。

最終的なコマンドは以下のようになった。

sudo qemu-system-arm \
    -kernel ./kernel-qemu-4.4.34-jessie \
    -machine versatilepb \
    -cpu arm1176 \
    -m 256 \
    -no-reboot \
    -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" \
    -drive "file=/dev/mmcblk0,index=0,media=disk,format=raw"

wikiと違う点はimgファイルを指定している箇所をホストでSDカードを示す箇所に変えるというところくらいか。結果無事に起動してくれた。ちょっと嬉しい。

neofetchでの表示

でも一つ問題があってwikiに書いてある-netオプションを加えてもなぜだかネットワークが有効にならない。QEMU慣れすらしていないのでこれについては素直に諦めてしまった。一切いじってないイメージなら使えるのかな? まあ最低限のコマンドは動くみたいだから設定値をメモするくらいならなんとか行けるか…?

# ネットワーク上手くいった (2020/11/12 追記)

これまでネットワークの設定は上記コマンドに-net nicを加えてやっててそれで上手く行かなかったんだけど、macaddrを更に加えることでこの環境では上手くいくことが判明した。つまり、

sudo qemu-system-arm \
    -kernel ./kernel-qemu-4.4.34-jessie \
    -machine versatilepb \
    -cpu arm1176 \
    -m 256 \
    -no-reboot \
    -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" \
    -drive "file=/dev/mmcblk0,index=0,media=disk,format=raw" \
    -net nic,macaddr=52:54:XX:XX:XX:XX # XX:.. は適当な16進数

というようにするとログインしてからインターネット上の適当な箇所に対しpingが通るようになった。52:54:の出典はArchWiki (opens new window)から。この-netに加え-net user,hostfwd=tcp::15555-:22みたいなのを指定するとホストからゲストにsshで繋げられるようになった。

ssh pi@localhost -p 15555

ただしちょっと調べたらmacaddrがあるとダメなパターン (opens new window)とかもあるらしく詳しくない身としては両方やってみようとしか言えない。どっちか上手くいくことを祈ろう。

# 参考文献