Linux设备驱动程序将串行fpga寄存器映射到内存

时间:2017-05-23 18:23:40

标签: serialization linux-device-driver fpga memory-mapping

有一个基于FPGA的寄存器组(512字节),可以使用特殊协议进行读/写。我想编写一个设备驱动程序,使用户进程可以读取/写入这些寄存器,如内存(数组,指针),而不是read()/ write()函数或处理协议。

  1. 这真的有可能吗?
  2. 我在哪里可以找到一些描述如何做到这一点?
  3. 主要步骤是什么?

2 个答案:

答案 0 :(得分:1)

  1. 是的,应该可以。
  2. LDD3开始,第3章和第15章。这些章节将介绍如何让驱动程序将寄存器集暴露给用户空间。
  3. 基本上,您的任务可以分为两部分:从驱动程序访问寄存器集,并从用户空间访问这些寄存器。第一部分取决于您的“特殊协议”,因为您没有提供任何有关它的信息,您在这里是独立的。第二部分是将char设备添加到系统中并在驱动程序中实现mmap()调用,这将允许您作为缓冲区访问内存区域。这在LDD3中有很好的描述。

答案 1 :(得分:0)

您需要一个实现mmap()的设备驱动程序,以便用户空间应用程序可以通过加载和存储指令访问寄存器。

您的驱动程序在映射寄存器时应禁用缓存,以便读取和写入始终与您的FPGA交互。可能您的驱动程序还需要禁用缓冲,以防您的硬件无法处理对寄存器的突发写入。

我的设计通常采用这种方式构建。我有一个通用设备驱动程序使应用程序能够mmap()控制逻辑。设备驱动程序还允许应用程序使用poll()等待硬件中断,以防需要。只是因为硬件已经改变而不必更新设备驱动程序就不那么令人头疼了。