我有一个模拟PCI设备的用户空间程序。我下载了使用NVMe标准与PCI设备交互的nvme linux设备驱动程序。我必须验证我的用户空间程序是否与标准兼容。将虚拟PCI设备与linux设备驱动程序接口
nvme.c(linux设备驱动程序)包含将在设备插入时调用的nvme_probe()函数。由于我没有该设备,因此我认为我将在nvme_init中包含探测功能( )功能。
现在我已经研究了很多在互联网上了解如何模仿PCI设备,岗位如 Installing PCI driver without connection to device, emulating a PCI device on linux 我不明白的想法如何在人口结构的pci_dev返回在函数调用的pci_set_drvdata(pdev, dev);
的nvme_probe()
如果你能提出一个教程,有关如何手动填充虚拟设备配置和用户空间程序函数指针的内存地址结构的pci_dev效仿与nvme驱动程序交互。
感谢您的解释......它清楚了很多东西。现在我想我会删除所有对PCI子系统的调用。nvme驱动程序使用队列与PCI设备进行通信。我正在考虑将队列数据复制到用户空间,从那里触发模拟代码。请评论..并且请给我一个关于内核模块与用户空间程序通信的教程。 – hasanijaz
你可以这样做来测试你的程序,(如果你只想与驱动程序交互)。我对nvme驱动没有任何经验,但一般所有驱动都会按照下面的模式 - [nvme-driver] <--- loads - [pci-driver] < - loads - [pci-总线驱动器] <----通知系统--- [设备]。箭头表示加载顺序。所以,如果您启用了一个fs驱动程序,我认为您必须将nvme-driver中使用的读/写功能短路(环回)。如果你只想从驱动程序获取数据,你可以使用netlink。我不确定你想使用哪条路径。希望这可以帮助 – fadedreamz
谢谢这真的帮助... – hasanijaz