Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux用户空间PCI驱动程序_Linux_Driver_Usermode - Fatal编程技术网

Linux用户空间PCI驱动程序

Linux用户空间PCI驱动程序,linux,driver,usermode,Linux,Driver,Usermode,我正在尝试编写一个在用户空间中运行的PCI设备驱动程序。不是我的主意,客户想要什么。Target是一个嵌入式Linux板,其用户永远不会超过一个。我是一名经验丰富的C程序员,了解Linux,只是不熟悉Linux驱动程序开发 这真的是一个设备驱动程序还是一个库?我是否需要使用典型的calls pci_register_驱动程序等,或者我可以使用fopen访问设备,然后使用mmap和ioperm访问它 中断将使用MSI模型完成。还需要处理DMA传输。该设备将向用户传输大量数据 关于这一主题的信息并不

我正在尝试编写一个在用户空间中运行的PCI设备驱动程序。不是我的主意,客户想要什么。Target是一个嵌入式Linux板,其用户永远不会超过一个。我是一名经验丰富的C程序员,了解Linux,只是不熟悉Linux驱动程序开发

这真的是一个设备驱动程序还是一个库?我是否需要使用典型的calls pci_register_驱动程序等,或者我可以使用fopen访问设备,然后使用mmap和ioperm访问它

中断将使用MSI模型完成。还需要处理DMA传输。该设备将向用户传输大量数据

关于这一主题的信息并不多,LDD3只花了几页的篇幅,在这方面我找不到任何其他信息


提前谢谢

如果没有处理PCI卡的驱动程序,则可以使用ioperm(或iopl-取决于地址)访问PCI卡,前提是只需要端口访问

如果没有内核模式驱动程序,使用DMA和中断是绝对不可能的

通过谷歌搜索,我发现了一些关于“通用内核模式驱动程序”的文字,它允许编写用户模式驱动程序(包括DMA和中断)


您应该询问您的客户Linux板上安装了哪种用于访问PCI卡的内核模式驱动程序。

现在有一种合适的方法来实现高性能用户空间PCI驱动程序,称为vfio。这里没有太多文档,但是请参阅内核文档和头文件/usr/include/linux.vfio.h。它从Linux 3.6开始提供。

谢谢您的回答。我找到了可以链接到用户程序的libpci-dev包,它确实提供了一些有限的功能。但正如您所说,DMA和中断处理丢失了。dev pci库几乎只允许您读取/写入pci配置寄存器。