在QEMU AArch64虚拟设备上访问ECAM

问题描述 投票:0回答:1

我正在尝试在QEMU AArch64 virt设备上实现裸机PCIE设备发现。我知道,ECAM区域已映射到0x3f000000内存地址,我希望在那里看到this table

但是当我从0x3f000000地址读取4个字节(MCFG签名)时,会出现同步异常。

我在做什么错?访问PCIE内存映射区域之前,我必须执行一些操作吗?

QEMU_CMD = qemu-system-aarch64 \
    -machine virt \
    -m 1024M \
    -cpu cortex-a53 \
    -serial stdio \
    -device virtio-gpu-pci \
    -vnc :0 \
    -netdev user,id=n1 -device virtio-net-pci,netdev=n1
arm qemu arm64 osdev pci-e
1个回答
1
投票

您输入的地址错误。如果未使用4GB以上的物理地址空间,则virt板仅将ECAM放在0x3f00_0000地址(这不是默认值;如果用户通过-machine highmem = off,则QEMU仅避免使用highmem)。

您可以通过要求QEMU转储dtb而不是运行来宾来进行检查,方法是在命令行中添加“ -machine dumpdtb = / tmp / dump.dtb”,然后使用“ dtc -I dtb -O dts来分解dtb。 /tmp/dump.dtb | less”,然后查看pci控制器的dtb。

通常,在QEMU“ virt”板上运行的来宾不应对设备的任何地址进行硬编码,而应始终读取QEMU生成并传递给来宾的dtb,以确定设备在地址空间中的放置位置。如果您的代码执行了此操作,则不会遇到此错误。

© www.soinside.com 2019 - 2024. All rights reserved.