我有一個模擬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