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

Serialization Linux设备驱动程序将串行fpga寄存器映射到内存,serialization,linux-device-driver,fpga,memory-mapping,Serialization,Linux Device Driver,Fpga,Memory Mapping,有一个基于FPGA的寄存器集512字节,可以通过特殊协议进行读/写。我想编写一个设备驱动程序,使用户进程能够像内存数组、指针那样读/写这些寄存器,而不是通过读/写函数或处理协议 这真的有可能吗? 在哪里我可以找到一些描述如何做到这一点? 主要步骤是什么? 是的,这应该是可能的。 从第三章和第十五章开始。这些章节将介绍如何使驱动程序向用户空间公开寄存器集的基本知识。 基本上,您的任务可以分为两部分:从驱动程序访问寄存器集和从用户空间访问这些寄存器。第一部分取决于您的特殊协议,因为您没有提供任何有关

有一个基于FPGA的寄存器集512字节,可以通过特殊协议进行读/写。我想编写一个设备驱动程序,使用户进程能够像内存数组、指针那样读/写这些寄存器,而不是通过读/写函数或处理协议

这真的有可能吗? 在哪里我可以找到一些描述如何做到这一点? 主要步骤是什么? 是的,这应该是可能的。 从第三章和第十五章开始。这些章节将介绍如何使驱动程序向用户空间公开寄存器集的基本知识。 基本上,您的任务可以分为两部分:从驱动程序访问寄存器集和从用户空间访问这些寄存器。第一部分取决于您的特殊协议,因为您没有提供任何有关它的信息,所以您在这里只能靠自己。第二部分是将char设备添加到系统中,并在驱动程序中实现mmap调用,这将允许您访问内存区域作为缓冲区。这在LDD3中有很好的描述。
您需要一个实现mmap的设备驱动程序,以便用户空间应用程序可以通过加载和存储指令访问寄存器

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


我的设计通常是这样组织的。我有一个通用的设备驱动程序,使应用程序能够映射控制逻辑。设备驱动程序还允许应用程序在需要时使用轮询来等待来自硬件的中断。仅仅因为硬件发生了变化就不必更新设备驱动程序,这就不那么令人头痛了。

您的计划可能有缺陷。首先,您声明寄存器有一个特殊的协议。但是您希望用户进程像内存一样读/写这些寄存器,但不处理协议。这听起来很矛盾。驱动程序可以/应该处理协议,而不是用户进程是的,设备驱动程序的目的是处理这样的协议。但是如果你映射了用户空间访问的寄存器,那么驱动程序就没有干预机制,这就是读写系统调用所提供的。@0andriy,你的意思是寄存器集根本不应该暴露于用户空间吗?是的,我就是这么说的。好的,你的建议是指:1好的,Mikhail,您的建议是否意味着:在驱动程序的内存空间中存在寄存器集的本地副本,并且用户空间可以使用mmap访问该副本?但是,如果用户空间写入一些数据,驱动程序如何跟踪更改?2作为一个想法,什么是错误的?我希望以较小的开销实现透明访问,因为它是一个嵌入式系统。