下载树莓派镜像
wget https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2023-10-10/2023-10-10-raspios-bookworm-arm64-lite.img.xz
解压缩
xz -d 2023-10-10-raspios-bookworm-arm64-lite.img.xz
用fdisk命令检测一下
fdisk -l 2023-10-10-raspios-bookworm-arm64-lite.img
Disk 2023-10-10-raspios-bookworm-arm64-lite.img: 2.54 GiB, 2722103296 bytes, 5316608 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7788c428
Device Boot Start End Sectors Size Id Type
2023-10-10-raspios-bookworm-arm64-lite.img1 8192 1056767 1048576 512M c W95 FAT32 (LBA)
2023-10-10-raspios-bookworm-arm64-lite.img2 1056768 5316607 4259840 2G 83 Linux
映像中有两个分区。第一个分区是启动分区,让我们挂载它看看里面有什么。我们需要知道分区的偏移量,即起始扇区乘以扇区大小。在我们的例子中,扇区大小为 512 字节,因此偏移量为 8192 * 512 = 4194304。
4194304 = 8192 * 512
sudo mkdir /mnt/image
sudo mount -o loop,offset=4194304 ./2023-10-10-raspios-bookworm-arm64-lite.img /mnt/image/
挂载后,就可以进行相应的操作。任何操作都会对镜像进行变更。
设置 ssh
sudo touch /mnt/image/ssh
拷贝内核和设备树
cp /mnt/image/bcm2710-rpi-3-b-plus.dtb ~
cp /mnt/image/kernel8.img ~
重置镜像大小为2的幂数,否则qemu会报错。
qemu-img resize ./2023-10-10-raspios-bookworm-arm64-lite.img 8G
启动
在 linux 上启动
sudo qemu-system-aarch64 \
-m 1024 \
-M raspi3b \
-kernel kernel8.img \
-dtb bcm2710-rpi-3-b.dtb \
-sd lite.img \
-append "console=tty0 root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4" \
-nographic \
-device usb-net,netdev=net0 \
-netdev user,id=net0,hostfwd=tcp::2222-:22 \
-nographic
在 windows 上启动
qemu-system-aarch64.exe \
-m 1024 \
-machine type=raspi3b \
-kernel kernel8.img \
-dtb bcm2710-rpi-3-b.dtb \
-drive format=raw,file=2023-10-10-raspios-bookworm-arm64-lite.img \
-append "console=ttyAMA0 root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4 dwc_otg.fiq_fsm_enable=0 bcm2708_fb.fbwidth=1280 bcm2708_fb.fbheight=720" \
-serial stdio \
-no-reboot \
-device usb-kbd \
-device usb-mouse \
-device usb-net,netdev=net0 \
-netdev user,id=net0,hostfwd=tcp::2222-:22
refs
linux arm
#!/bin/sh
cd `dirname $0`
qemu-system-arm \
-m 1024 \
-M raspi2 \
-kernel kernel7.img \
-dtb bcm2709-rpi-2-b.dtb \
-drive format=raw,file=2020-08-20-raspios-buster-armhf.img \
-append "console=ttyAMA0 root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4 dwc_otg.fiq_fsm_enable=0 bcm2708_fb.fbwidth=1280 bcm2708_fb.fbheight=720" \
-serial stdio \
-no-reboot \
-device usb-kbd \
-device usb-tablet \
-device usb-net,netdev=net0 \
-netdev user,id=net0,hostfwd=tcp::2222-:22
https://qiita.com/yaju/items/edf548efd18f0eaab94a
https://peterbabic.dev/blog/how-emulate-raspios-natively-qemu/
https://interrupt.memfault.com/blog/emulating-raspberry-pi-in-qemu