0

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

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

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

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

提前致谢!

4

2 回答 2

1

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

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

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

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

于 2013-09-26T20:04:17.217 回答
1

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

于 2014-01-17T23:19:10.690 回答