gpt4 book ai didi

c - 将 Linux 设备驱动程序与虚拟 PCI 设备连接

转载 作者:行者123 更新时间:2023-12-02 01:57:03 25 4
gpt4 key购买 nike

我有一个模拟 PCI 设备的用户空间程序。我已经下载了 nvme linux 设备驱动程序,该驱动程序使用 NVMe 标准与 PCI 设备交互。我必须验证我的用户空间程序是否与标准兼容。

nvme.c(linux 设备驱动程序)包含 nvme_probe() 函数,该函数在插入设备时将被调用。由于我没有该设备,所以我想我将在 nvme_init() 中合并探测功能功能。

现在我在互联网上研究了很多,以了解如何模拟 PCI 设备,例如 Installing PCI driver without connection to device , emulating a PCI device on linux我不知道如何将填充的 struct pci_dev 返回到 pci_set_drvdata(pdev, dev);

nvme_probe() 中的函数调用

如果您可以建议一个教程,介绍如何使用虚拟设备配置和用户空间程序函数指针的内存地址手动填充 pci_dev 结构,以模拟与 nvme 驱动程序的交互。

最佳答案

我认为用标准 Linux 内核不可能伪造这样的东西。

因为在 module_init() 中,当系统中存在某个设备时(通过 id_table),您告诉内核的 PCI SUBSYSTEM 加载操作处理程序(也称为通过函数指针回调)。

因此,每当您安装模块时,每当匹配 vid/pid 的设备插入 PCIe 插槽时,内核的 PCI SUBSYTEM 就会知道加载您的驱动程序。操作如下 -

  • 当此 {vid/pid} pci 设备启动时,告诉内核加载 {my_driver.ko}在 module_init 或 _init 中找到
  • 内核知道后,每当有匹配的 {vid/pid} 设备连接到系统时,就会调用 {my_driver.ko} 的 .probe 函数回调
  • 您可以初始化设备(对于真实设备)或仅返回 true 来告诉内核已正确初始化设备。您还可以从此探测函数注册新的驱动程序类型(例如读/写)。

我不确定是否有任何神奇的 VID/PID 数字会导致 PCI SUBSYTEM 始终加载驱动程序。

但是您实际上可以使用实际的 PCI 设备来加载 PCI 驱动程序。

只需删除真实 PCI 设备的适当驱动程序即可。并使用它的 VID 和 PID 作为驱动程序的 VID PID。然后PCI SUBSYTEM将加载您的驱动程序,之后您还可以测试您的驱动程序以模拟PCI设备。

希望这有帮助,

问候。

关于c - 将 Linux 设备驱动程序与虚拟 PCI 设备连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13760912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com