You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用QEMU模拟树莓派3的Ubuntu Core?模拟失败求助

成功用QEMU模拟树莓派3 Ubuntu Core的可行方案

我之前成功搞定过QEMU模拟树莓派3的Ubuntu Core,踩过不少和你一样的坑,给你分享下可行的步骤:

一、别再混用Raspbian内核了——Ubuntu Core需要专属启动文件

Ubuntu Core的启动逻辑和Raspbian不一样,而且树莓派3支持64位,我们要对应使用arm64版本的Ubuntu Core镜像,以及配套的Ubuntu官方树莓派启动文件,具体要准备这些:

  • 树莓派3对应的Ubuntu Core arm64镜像(比如Ubuntu Core 20/22的arm64版本)
  • 适配的64位内核文件:kernel8.img(不是Raspbian的kernel.img,那是32位的)
  • 树莓派3的设备树文件:bcm2710-rpi-3-b.dtb
  • 树莓派启动固件:bootcode.bin、start.elf、fixup.dat(这些是引导内核必须的)

你可以从Ubuntu Core镜像的boot分区里提取kernel8.img和dtb文件;启动固件可以从Ubuntu官方的raspi-firmware包中获取,或者从一台已安装Ubuntu的树莓派上复制。

二、准备镜像和启动文件的操作步骤

  1. 挂载Ubuntu Core镜像,提取boot分区内容:
    # 先查看镜像的分区信息
    fdisk -l ubuntu-core-20-arm64.img
    # 挂载boot分区(假设p1的起始扇区是8192,每个扇区512字节,计算偏移量:8192*512=4194304)
    mkdir -p ./boot-mount
    mount -o loop,offset=4194304 ubuntu-core-20-arm64.img ./boot-mount
    # 复制需要的文件
    cp ./boot-mount/kernel8.img ./
    cp ./boot-mount/bcm2710-rpi-3-b.dtb ./
    umount ./boot-mount
    
  2. 把启动固件(bootcode.bin、start.elf、fixup.dat)放到和内核、镜像同目录下。

三、正确的QEMU启动命令

用这条命令启动,注意参数要对应arm64架构和raspi3机器:

qemu-system-aarch64 \
  -M raspi3 \
  -kernel kernel8.img \
  -dtb bcm2710-rpi-3-b.dtb \
  -sd ubuntu-core-20-arm64.img \
  -append "console=ttyAMA0,115200 root=/dev/mmcblk0p2 rw rootwait" \
  -serial stdio \
  -usb \
  -device usb-mouse \
  -device usb-kbd

这里的关键参数说明:

  • -M raspi3:指定模拟树莓派3硬件
  • -append里的root=/dev/mmcblk0p2:Ubuntu Core的根分区是镜像的第二个分区,必须指定正确
  • -serial stdio:把串口输出定向到终端,方便看启动日志排查问题

四、你之前失败的可能原因

  • 用了32位的kernel.img:树莓派3的64位系统需要kernel8.img,混用32位内核会导致无法加载根文件系统
  • 启动固件不全:缺少bootcode.bin这些文件的话,QEMU没法引导内核启动
  • 根分区指定错误:如果你的Ubuntu Core镜像分区结构不同,要先用fdisk确认根分区的编号

内容的提问来源于stack exchange,提问作者Rustam Isaev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:53:03