2025-03-06
进行嵌入式开发一般都需要嵌入式开发板,但是购买嵌入式板需要一定费用。对于初学者也不知道选择哪种类型的嵌入式板才比较合适。所以对于初学者来说,物理的开发板不是最好的选择。电路有模拟软件,嵌入式开发也有模拟软件qemu。可以使用qemu进行嵌入式开发,使用qemu-system-aarch64 -M help可以查看模拟器支持的开发板。
由于最近在网上跟着课程学习嵌入式开发,课程使用的是raspberrypi的开发板。通过问AI、搜索和尝试后终于成功在qemu上成功启动pi3b。下面是详细的教程。
2024-10-22-raspios-bullseye-arm64-lite.img.xz
qemu版本: qemu-system-aarch64 --versionQEMU emulator version 9.1.2
Copyright (c) 2003-2024 Fabrice Bellard and the QEMU Project developers
安装依赖:sudo apt install qemu-system-arm qemu-efi-aarch64 xz-utils
复制内核和设备树
mkdir pi3b mountpoint
unxz 2024-10-22-raspios-bullseye-arm64-lite.img.xz
losetup -fP --show 2024-10-22-raspios-bullseye-arm64-lite.img
mount /dev/loop0p1 /mountpoint
cp mountpoint/kernel8.img pi3b/
cp mountpoint/bcm2710-rpi-3-b.dtb pi3b/
umount mountpoint
losetup -d /dev/loop0
cp 2024-10-22-raspios-bullseye-arm64-lite.img sd.img
qemu-img resize -f raw sd.img 4G
mv sd.img pi3b/
cd pi3b
# 因为使用默认的用户名和密码无法登陆成功,需要先在图形界面进行用户名和密码设置
qemu-system-aarch64 \
    -M raspi3b \
    -cpu cortex-a72 \
    -kernel kernel8.img \
    -dtb bcm2710-rpi-3-b.dtb \
    -append "rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootdelay=1" \
    -m 1G -smp 4 \
    -serial stdio \
    -drive file=sd.img,format=raw,if=sd \
    -usb -device usb-mouse -device usb-kbd \
    -device usb-net,netdev=net0 \
    -netdev user,id=net0,hostfwd=tcp::5555-:22
qemu-system-aarch64 \
    -M raspi3b \
    -cpu cortex-a72 \
    -kernel kernel8.img \
    -dtb bcm2710-rpi-3-b.dtb \
    -append "rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootdelay=1" \
    -m 1G -smp 4 \
    -serial mon:stdio \
    -nographic \
    -drive file=sd.img,format=raw,if=sd \
    -usb -device usb-mouse -device usb-kbd \
    -device usb-net,netdev=net0 \
    -netdev user,id=net0,hostfwd=tcp::5555-:22
systemctl enable ssh.service
systemctl start ssh.service
SSH连接树莓派:ssh <用户名>@localhost -p 5555
扩展SD卡容量
fdisk -lDevice         Boot  Start     End Sectors  Size Id Type
/dev/mmcblk0p1        8192  532479  524288  256M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      532480 4120575 3588096  1.7G 83 Linux
parted /dev/mmcblk0
resizepart 2 4G
quit
重新设置文件系统大小:resize2fs /dev/mmcblk0p2
检查结果:df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       3.4G  1.5G  1.8G  46% /
devtmpfs        427M     0  427M   0% /dev
tmpfs           461M     0  461M   0% /dev/shm
tmpfs           185M  852K  184M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/mmcblk0p1  255M   31M  225M  13% /boot
tmpfs            93M     0   93M   0% /run/user/1000
sudo apt install build-essential
sudo apt install device-tree-compiler
sudo apt install raspberrypi-kernel-headers