【问题标题】:Linux user space PCI driverLinux用户空间PCI驱动
【发布时间】:2013-10-02 12:57:58
【问题描述】:

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

这真的是一个设备驱动程序还是只是一个库?我需要使用典型的调用 pci_register_driver 等,还是可以只使用 fopen 访问设备,并使用 mmap 和 ioperm 来访问它?

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

关于这个主题的信息不多,LDD3 只用了几页的篇幅,在 SO 上我找不到其他任何信息。

提前致谢!

【问题讨论】:

    标签: linux driver usermode


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的回答。我发现了可以链接到用户程序的 libpci-dev 包,它确实提供了一些有限的功能。但是正如您所说,缺少 DMA 和中断处理。 dev pci 库几乎只允许您读取/写入 pci 配置寄存器。
    【解决方案2】:

    现在有一种合适的方法来执行高性能用户空间 PCI 驱动程序,称为 vfio。文档不多,但请参阅内核文档http://lxr.free-electrons.com/source/Documentation/vfio.txt 和头文件/usr/include/linux.vfio.h。它从 Linux 3.6 开始可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-06
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多