我正在尝试编写一个在用户空间中运行的 PCI 设备驱动程序。不是我的想法,客户想要什么。 Target 是一款嵌入式 Linux 开发板,用户永远不会超过一个。我是一名经验丰富的 C 程序员,了解 Linux,只是不熟悉 Linux 驱动程序开发。
这真的是一个设备驱动程序还是一个库?我是否需要使用典型的调用 pci_register_driver 等,或者我是否可以使用 fopen 访问设备,并使用 mmap 和 ioperm 来访问它?
中断将使用 MSI 模型完成。还需要处理 DMA 传输。该设备将向用户流式传输大量数据。
关于这个主题的信息不多,LDD3 只用了几页来介绍它,我在这里找不到任何关于 SO 的信息。
提前致谢!
最佳答案
如果没有驱动程序处理 PCI 卡,如果只需要端口访问,则可以使用 ioperm(或 iopl - 取决于地址)访问它。
如果没有内核模式驱动程序,使用 DMA 和中断绝对是不可能的。
通过谷歌搜索,我发现了一些关于“通用内核模式驱动程序”之类的文本,它允许编写用户模式驱动程序(包括 DMA 和中断)。
您应该询问您的客户在 Linux 主板上安装了哪种用于访问 PCI 卡的内核模式驱动程序。
关于Linux 用户空间 PCI 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19030249/