【问题标题】:Testing a userspace driver that uses VFIO?测试使用 VFIO 的用户空间驱动程序?
【发布时间】:2018-02-03 21:42:38
【问题描述】:

我有一个可能有问题的硬件和一个可能有问题的用户空间驱动程序,它依赖于 vfio-pci 内核驱动程序。我想在不处理硬件的情况下测试驱动程序。

我想理想的解决方案是这样的:运行我的整个堆栈,除了硬件(应用程序、用户空间驱动程序、VFIO 驱动程序)并拦截 VFIO 驱动程序决定发送到硬件的所有内容。然后我可以验证硬件是否获得了正确的信息——重置发生在预期的时间,DMA 将进入正确的地址,等等。

我想我正在寻找类似于模拟设备的东西,它可以让我在 vfio-pci 下运行用户空间代码,而不是运行硬件。有这种事吗?

【问题讨论】:

  • 有趣的问题!

标签: linux linux-kernel driver linux-device-driver vfio


【解决方案1】:

使用 Qemu,模拟设备变得非常容易。我经常用它来做一些 Linux 内核研究。在 Archlinux 上,qemu-arch-extra 带有一堆机器:

$ qemu-system-arm -machine help
Supported machines are:
[..]
cubieboard           cubietech cubieboard
emcraft-sf2          SmartFusion2 SOM kit from Emcraft (M2S010)
highbank             Calxeda Highbank (ECX-1000)
imx25-pdk            ARM i.MX25 PDK board (ARM926)
integratorcp         ARM Integrator/CP (ARM926EJ-S)
kzm                  ARM KZM Emulation Baseboard (ARM1136)
lm3s6965evb          Stellaris LM3S6965EVB
lm3s811evb           Stellaris LM3S811EVB
mainstone            Mainstone II (PXA27x)
midway               Calxeda Midway (ECX-2000)
[and more...]

您的任务的一个好方法是为 Qemu 编写一个模拟 PCI 设备,并在那里进行测试。

确实没有太多可以解释的,因为有很多关于使用和扩展 Qemu 的好材料。快速的谷歌搜索显示了一些很好的资源。 This 回答有一些超级有用的提示,here's 一个不错的教程。

【讨论】:

  • 我希望存在一些开箱即用的东西,但我想不是。您是否有任何关于在没有 qemu 的情况下存根设备所需的指示?我认为我错过了这个过程的一些基本方面。
猜你喜欢
  • 2011-01-11
  • 2013-02-23
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
相关资源
最近更新 更多