Heng30的博客
搜索 分类 关于 订阅

如何使用qemu启动raspi3b进行嵌入式开发?

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 --version
QEMU 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
  • 启用SSH
systemctl enable ssh.service
systemctl start ssh.service
  • SSH连接树莓派:ssh <用户名>@localhost -p 5555

  • 扩展SD卡容量

    • 查看设备名称:fdisk -l
    Device         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

参考