QEMU:如何将 SD 卡连接到特定控制器?

QEMU: How to connect a SD card to a specific controller?

我想将 SD 卡连接到 i.MX6 SoC 的第一个 SD 控制器(基地址为 0x2190000 的控制器)。 但是 QEMU 默认将它添加到第三个控制器(使用 4.2 和 5.1 版本测试)。

QEMU 参数:

qemu-system-arm -m 2G -M sabrelite -kernel zImage \
-drive file=img.sdcard,format=raw,id=mysdcard \
-device sd-card,drive=mysdcard \
-append "console=ttymxc0, rootfstype=ext4 root=/dev/mmcblk0p2 rw rootwait" \
-dtb mydtb.dtb -serial stdio

“信息 qtree”的输出:

  dev: imx-usdhc, id ""
    gpio-out "sysbus-irq" 1
    sd-spec-version = 3 (0x3)
    uhs = 0 (0x0)
    capareg = 91763892 (0x57834b4)
    maxcurr = 0 (0x0)
    pending-insert-quirk = false
    dma = ""
    mmio 000000000219c000/0000000000000100
    bus: sd-bus
      type sdhci-bus
      dev: sd-card, id ""       <-- I do not want the SD card to appear here
        spec_version = 2 (0x2)
        drive = "mysdcard"
        spi = false
  dev: imx-usdhc, id ""
    [...]
  dev: imx-usdhc, id ""
    [...]
  dev: imx-usdhc, id ""
    gpio-out "sysbus-irq" 1
    sd-spec-version = 3 (0x3)
    uhs = 0 (0x0)
    capareg = 91763892 (0x57834b4)
    maxcurr = 0 (0x0)
    pending-insert-quirk = false
    dma = ""
    mmio 0000000002190000/0000000000000100
    bus: sd-bus
      type sdhci-bus           <-- This is where the card needs to be

我想指定控制器的 id,但是所有 imx-usdhc 都有一个空字符串作为 id。

那么我如何指定要使用的控制器(或者至少告诉 QEMU 默认使用第一个控制器)?

这应该是可能的,但由于 QEMU 中的 bug/missing 功能,目前还不能。这是在此处报告的:https://bugs.launchpad.net/qemu/+bug/1895895 and there is mailing list discussion of it here: https://lore.kernel.org/qemu-devel/CAFEAcA_PFGc2Ka-egqYqzMq0Nu_aRiNUPif0yntg4L56UTi7MQ@mail.gmail.com/ 但还没有人开始编写(相当小的)补丁来实施修复。

总而言之,imx6 SoC 的 QEMU 中的 SoC 设备对象应该为 4 个控制器创建别名“sd-bus0”、“sd-bus1”等。然后在命令行上,您可以将“,bus=sd-bus2”添加到 -device sd-card 选项,以告诉 QEMU 将其插入哪个特定总线。目前这不起作用,因为所有 sd 总线都具有相同的名称。