linux - 测试使用 VFIO 的用户空间驱动程序?

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

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

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

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

最佳答案

使用 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一个不错的教程。

关于linux - 测试使用 VFIO 的用户空间驱动程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48602357/

相关文章:

RMongo 在 Ubuntu 中安装失败并出现段错误

linux - linux下修改网络接口(interface)名称,忽略文件70-persistent-net.rules

linux - 如何调整内核模块以通过 `no symbol version for module_layout` ?

linux - 多个命令 grep

c++ - Qt 4.8.0 - 未列出 MySQL 驱动程序

java - Cassandra 跟踪和客户端延迟之间的差异

java - 如何确定 JDBC 使用哪个驱动程序

linux - 构建自定义 Linux Live CD

linux - 在 Shell 中,如何将目录的内容移动到同一级别的另一个目录

linux - 从具有多个二进制文件的源文件创建 debian 包