由于实现了基于 Linux VFIO 驱动程序的 RC 示例应用程序 ti-sample-vfio 以用于测试和验证,因此节 5 中所述的某些测试需要使用该应用程序。要使用 ti-sample-vfio,需要实现以下设置:
- PCIe 成功引导后,打开 Linux 终端并获得 root 权限:
sudo su
- 在 Linux 终端中使用 lspci 命令确定 TMDS243EVM PCIe EP 器件的总线、器件和功能编号。使用 Sysconfig 中设置的供应商和器件 ID。使用以下命令进行搜索,该命令会以数字形式显示所有 PCIe 器件的相关信息:
lspci -vtn
- 下图展示了上一命令的输出。在本例中,PCIe EP 被分配了总线 4、器件 00 和功能 0。
- 使用 modprobe 加载 VFIO-PCI 驱动程序:
modprobe vfio-pci
-
将 TMDS243EVM PCIe EP 供应商和器件 ID 分配给 VFIO 驱动程序。
echo "17cd 0100" > /sys/bus/pci/drivers/vfio-pci/new_id
- 检查 PCIe EP 被分配到的 IOMMU 组:
readlink /sys/bus/pci/devices/0000:04:00.0/iommu_group
- 上一命令的输出可提供:分配了 IOMMU 组的 PCIe EP。
- 确保 EP 是此 IOMMU 组中的唯一器件:
ls -l /sys/bus/pci/devices/0000:04:00.0/iommu_group/devices
可以看出,TMDS243EVM PCIe EP 是 IOMMU 组 60 中的唯一器件。如果同一 IOMMU 组内有其他 PCIe 器件,则这些 PCIe 器件也必须绑定到 VFIO 驱动程序。
- 编译 ti-sample-vfio(后续步骤不再需要 root 权限):
gcc ti-sample-vfio.c -o ti-sample-vfio -g -O2
- 使用先前确定的参数执行 ti-sample-vfio 应用程序:
sudo ./ti-sample-vfio 40 0 60 1 wait
注: ti-sample-vfio 应用程序需要以下参数才能执行:
- [bus]:PCIe EP 总线编号
- [device]:PCIe EP 器件型号
- [function]:PCIe EP 功能编号
- [IOMMU group]:PCIe EP IOMMU 组
- [test_mode] 仅测试用例 4.3.2 需要此参数,它指的是扩展入站 ATU/BAR 配置(请参阅相应的说明)。要启动测试用例,必须传递参数 testbars。否则,可以省略此参数,输入将解释为后续参数 [Number of MSI IRQs]。
- [Number of MSI IRQs]:测试 4.5.2 中描述的要测试的 MSI IRQ 的数量。如果未执行测试 4.5.2,则该参数需要设置为 1。
- [Number of loops]:测试程序可以执行的环路数量。此参数是可选的,可以留空。默认值是 10。
- [‘wait’] 此参数用于指示测试程序在测试应用程序执行期间等待用户输入。