Linux 用户空间 PCI 驱动程序

标签 linux driver usermode

我正在尝试编写一个在用户空间中运行的 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/

相关文章:

linux - 使用重命名命令批量重命名文件

c++ - syscalls.h 以及 minor() 和 major() 函数

linux - C 预处理器的输出不符合预期

linux - 系统调用是应用程序/用户程序请求操作系统服务来执行特权操作的唯一方式吗?

java - Servlet 在本地 Windows 上工作,但在 Linux 上不工作

linux - 将 skb->data 复制到多个描述符

windows - 触摸板的绝对触摸坐标

c - 如何从 ext2 block 组读取 inode 表?

windows - 具有 NDIS 的用户模式驱动程序

virtual-address-space - 为什么内核模式下的驱动程序必须非常小心地直接读取或写入用户空间中的地址?