WSL2(Ubuntu)上のQEMUにて、RaspberryPi OS bullseye を起動してみる

GitHub上に コンパイル済みの bullseye 用ファイルが置かれているのに気付いたので、動くかどうか試してみました。

※2022/01/14時点の情報です

参照URL→ https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki

手順

  1. WLS2上にqemu-system-arc をインストールする
  2. 2021-10-30-raspios-bullseye-armhf-lite.img を入手する
    入手元→ http://ftp.jaist.ac.jp/pub/raspberrypi/raspios_lite_armhf/images/raspios_lite_armhf-2021-11-08/
  3. kernel-qemu-5.10.63-bullseye と versatile-pb-bullseye-5.10.63.dtb を入手する
    入手元→ https://github.com/dhruvvyas90/qemu-rpi-kernel
  4. imgファイルのリサイズ
    ~# qemu-img resize 2021-10-30-raspios-bullseye-armhf-lite.img 8G
  5. 参照URLを元に、次のような方法で一時的にラズパイOSを起動する
    qemu-system-arm -kernel kernel-qemu-5.10.63-bullseye \
        -dtb ./versatile-pb-bullseye-5.10.63.dtb \
        -cpu arm1176 \
        -m 256 \
        -M versatilepb \
        -no-reboot \
        -serial stdio \
        -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash" \
        -hda 2021-10-30-raspios-bullseye-armhf-lite.img

    これでラズパイOSが起動します

  6. /etc/ld.so.preload を編集
    # vi /etc/ld.so.preload
    #/usr/lib/arm-linux-gnueabihf/libarmmem-${PLATFORM}.so
    # ↑この行をコメントアウト
  7. /etc/udev/rules.d/90-qemu.rules を作成する
    # vi /etc/udev/rules.d/90-qemu.rules
    KERNEL=="sda", SYMLINK+="mmcblk0"
    KERNEL=="sda?", SYMLINK+="mmcblk0p%n"
    KERNEL=="sda2", SYMLINK+="root"
  8. OS停止
    poweroff(効かなければ sync; sync; ののち、^Cでvm強制シャットダウン)
  9. 起動スクリプト作成
    qemu-system-arm -kernel kernel-qemu-5.10.63-bullseye \
        -dtb ./versatile-pb-bullseye-5.10.63.dtb \
        -cpu arm1176 \
        -m 256 \
        -M versatilepb \
        -no-reboot \
        -serial stdio \
        -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" \
        -drive "file=2021-10-30-raspios-bullseye-armhf-lite.img,index=0,media=disk,format=raw"

※64bit版は今日時点で動かせなかった
※usbデバイスも未対応?