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

如何在QEMU模拟树莓派4B时指定MMC设备编号为0

解决QEMU模拟树莓派4B时SD卡映射到mmc0的问题

方法1:修改U-Boot启动参数(临时/永久生效)

从你的U-Boot输出可见,SD卡实际挂载在mmc1,但镜像硬编码了mmcblk0路径,直接调整U-Boot启动命令即可适配:

  1. U-Boot倒计时时按任意键进入命令行
  2. 执行以下命令临时启动系统:
setenv bootargs 'console=ttyAMA0 root=/dev/mmcblk1p2 rootwait rw'
mmc dev 1
fatload mmc 1:1 0x01000000 kernel8.img
bootm 0x01000000
  1. 若要永久生效,在启动前执行:
saveenv

后续启动U-Boot会自动从mmc1加载内核与根文件系统。

方法2:修改镜像中的启动配置文件

如果不想每次手动调整U-Boot参数,可直接修改镜像内的启动配置:

  1. 挂载提取的0.fat分区到本地目录:
mount 0.fat /mnt/boot
  1. 编辑/mnt/boot/cmdline.txt,将root=/dev/mmcblk0p2替换为root=/dev/mmcblk1p2
  2. 处理boot.scr启动脚本:
    • 反编译脚本:mkimage -l boot.scr && mkimage -x boot.scr > boot.cmd
    • 编辑boot.cmd,将所有mmc 0相关命令替换为mmc 1(比如mmc dev 0改为mmc dev 1、fatload mmc 0:1改为fatload mmc 1:1)
    • 重新编译脚本:mkimage -A arm64 -O linux -T script -C none -a 0 -e 0 -n "Boot Script" -d boot.cmd boot.scr
  3. 卸载分区:umount /mnt/boot,将修改后的0.fat替换回原镜像对应分区

方法3:调整QEMU设备映射(强制SD卡挂到mmc0)

QEMU的raspi4b机型默认将SD卡挂载到SD控制器(对应U-Boot的mmc1),而eMMC控制器对应mmc0。可通过指定设备总线强制将SD卡挂到mmc0控制器:
使用以下QEMU命令启动:

qemu-system-aarch64 -M raspi4b -dtb 0/bcm2711-rpi-4-b.dtb -m 2G -smp 4 \
  -device sd-card,drive=mycard,bus=mmc-bus.0 \
  -drive file=sd.wic,if=none,id=mycard,format=raw \
  -serial stdio

bus=mmc-bus.0对应U-Boot中的mmc@7e340000:0(即mmc0),SD卡会被识别为mmc0,匹配镜像的硬编码路径。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 04:17:16