在向内核设备文件系统注册该FPGA 驱动 后,还须实现设备驱动的file_operations结构,ACEX1K50的设备驱动定义了如下file_operations成员函数:
其中fpga_open和fpga_release系统调用的功能只简单地实现了FPGA设备使用计数器的递增与递减,fpga_ioctl系统调用也只是简单的打印一条没有ioctl控制的信息提示。这里不再分析实现的具体代码。下面具体分析fpga_mmap的实现过程:
fpga_mmap(struct file*filp,struct vm_area_struct*vma)系统调用允许直接将FPGA设备内存线性地映射到用户进程的地址空间中,fpga_mmap系统调用是通过调用remap_page_range()函数来实现一段线性物理地址的映射,调用remap_page_range()函数需要填写vm_area_struct结构的几个关键字段。
4 ACEX1K50设备驱动在用户程序中的使用
当设备驱动实现后就可以在用户空间使用该设备了。在用户空间主要是通过调用mmap()函数来实现对FPGA设备的访问。以下是用户空间应用程序的一个示例:
结语
本文通过介绍ACEX1K50在 Linux 操作系统下设备驱动的实现过程,为FPGA在嵌入式领域的应用提供了一种方法。在实际应用中,通过用户程序能够很好地实现对FPGA硬件编程后的各种功能的控制。
本文关键字:Linux 嵌入式系统-技术,单片机-工控设备 - 嵌入式系统-技术
上一篇:单片机在测控系统中的抗干扰技术