FPGA-based设备驱动
FPGA-based设备驱动可以有下面3种实现方法:1。用户程序直接调用mmap(), 把fpga base address映射到用户空间; 用户程序直接从映射后的用户空间地址操作fpga寄存器
2。写一个驱动程序,驱动操作函数组里实现mmap函数, 驱动的这个mmap函数会利用remap_pfn_range()把fpga base address映射到用户空间; 用户程序用驱动程序影射的地址操作fpga寄存器
3 写一个驱动程序, 驱动程序会利用ioremap()把fpga base address映射到内核空间地址;驱动程序再提供read()/write()给用户来操作ioremap影射的内核地址,进尔操作fpga寄存器
那一种map是linux比较钟爱的方法? 没人点评一下?
我看内核例程有些驱动是第三种方法
有的书上用的是第二方法作例子
我自己写的驱动用了最简单的第一种方法 方法简单,通用性差 回复 3# moon146
FPGA实现的硬件功能本身差别较大, 功能不一样时不能指望驱动能通用;功能相同时只要变变base address就可以通用。
本帖最后由 bensenq 于 2012-06-25 21:42 编辑
我怎么感觉你说的前两种方法是一回事儿呢?不都是使用remap_pfn_range把物理地址映射到用户空间么?
回复 1# linuxfellow
回复 5# bensenq
第一种方法是直接从用户空间通过mmap系统调用来实现,不用写驱动
第二种方法驱动要实现
你说的第一种,用户调用mmap进行映射是不是要制定给一个fd,这样mmap系统调用会找到对应设备程序中file operations结构中的mmap(),然后mmap调用remap_pfn_range最终实现映射。这不就是一回事儿么?
莫非还可以不用实现驱动中的mmap,利用默认的mmap就可以映射物理空间、IO?
linuxfellow 发表于 2012-06-27 10:10 static/image/common/back.gif
回复 5# bensenq
第一种方法是直接从用户空间通过mmap系统调用来实现,不用写驱动
第二种方法驱动要实现 ... 本帖最后由 linuxfellow 于 2012-06-28 09:11 编辑
回复 7# bensenq
不好意思,你是对的:
第一种方法,用现成驱动“/dev/mem"的mmap()来映射物理空间、IO;
第二种方法,写自己的驱动“/dev/myfpga" 实现mmap()来映射物理空间、IO
两种方法是一样的
小弟菜鸟一个,问个初级问题,怎么加载FPGA程序呢? 回复 9# wawava
google或baidu上查一下“FPGA程序下载”, 会有详细答案