System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及使用fpga xdma ip核的高速数据传输领域,具体是一种支持多进程的fpga xdma驱动方法,支持多用户、多进程的xdma驱动实现。
技术介绍
1、fpga因其数据处理速度快、延迟低、安全性好等优势,广泛应用于数据加密领域,这类fpga通常采用pcie的ip核以充分发挥其传输速率快的优势,目前中低端fpga多采用xdma的ip核,由于ip核物理通道数量有限,因此通常无法满足多进程同时读写的需求,在用户空间实现多进程支持需要服务程序后台负责进程间通信,其稳定性不佳、传输速率较低,对应用程序的开发要求较高,不利于快速迭代。
技术实现思路
1、本专利技术要解决的技术问题是提供一种支持多进程的fpga xdma驱动方法,在不改变硬件的情况下,实现对多进程、多用户的支持,实现多进程的同时读写操作。
2、为了解决所述技术问题,本专利技术采用的技术方案是:一种支持多进程的fpga xdma驱动方法,首先创建多个设备节点,每个设备节点对应一个进程,并创建多个fifo与设备节点一一对应,fifo用于缓存各个进程接收到的数据;各个进程封装私有协议后,通过对设备节点的读写实现数据接收和发送;单个设备节点同时只被一个进程打开。
3、进一步的,本方法实现数据写入的过程为:当应用程序通过设备节点写入数据后,调用驱动程序的写入接口,驱动程序的写入接口首先获取当前写入数据的设备节点编号,然后对后续代码进行加锁,根据设备节点号检查对应的接收fifo空间是否充足,如果空间不
4、进一步的,接收fifo空间是否充足的判据为:fifo剩余空间不少于dma buf的总空间。
5、进一步的,所述延迟时间为50 ms。
6、进一步的,本方法实现数据读取的过程为:当应用程序通过设备节点读取数据时,调用驱动程序的读取接口,驱动程序的读取接口首先获取当前读取数据的设备节点编号,根据节点编号检查对应的fifo是否有数据,如果没有数据直接返回0,如果有数据则读取私有协议头部,解析当前包的长度,根据长度将数据拷贝到应用程序的buf中,返回数据长度。
7、进一步的,本方法设有接收线程,接收线程启动时设定idle和busy两种状态下接收线程的运行时间,idle表示没有数据传输时的状态,busy表示持续有数据传输时的状态,随后接收线程开始循环执行以下操作:首先读取fpga寄存器,判断是否有新数据到达,如果没有,则判断idle状态是否超时,如果超时则使接收线程进入休眠,等待被唤醒或者睡眠时间到达后重新设置idle和busy状态时接收线程运行时间;如果读取fpga寄存器有新数据到达,则判断busy状态是否超时,如果超时则进入休眠,如果busy状态没有超时,则定位到描述链表的相应位置,读取数据,并根据协议解析数据,如果数据不符合协议则丢弃,如果符合协议则将数据存入对应的fifo中,进行下一次循环。
8、进一步的,在驱动程序加载时指定设备节点的数量,指定方法为:insmod xdma.kouser_num=x, x表示要创建的设备节点数量。
9、进一步的,驱动程序在/dev/xdma 目录下创建多个设备节点。
10、本专利技术的有益效果:本专利技术在不改变硬件的情况下,通过驱动程序实现对多进程、多用户的支持,最大支持数量可配置,可实现多进程的同时读写操作,传输过程不丢包,通道间数据互相独立,单个进程的阻塞不会影响其他进程,应用程序操作简单,只需对设备节点进行读写即可完成,传输速率大幅优于原生驱动程序。
11、兼顾速率与时效性,大数据量传输时可保证速率,少量数据传输时可保证时效性,减少cpu占用。
本文档来自技高网...【技术保护点】
1.一种支持多进程的FPGA xdma驱动方法,其特征在于:首先创建多个设备节点,每个设备节点对应一个进程,并创建多个FIFO与设备节点一一对应,FIFO用于缓存各个进程接收到的数据;各个进程封装私有协议后,通过对设备节点的读写实现数据接收和发送;单个设备节点同时只被一个进程打开。
2.根据权利要求1所述的支持多进程的FPGA xdma驱动方法,其特征在于:本方法实现数据写入的过程为:当应用程序通过设备节点写入数据后,调用驱动程序的写入接口,驱动程序的写入接口首先获取当前写入数据的设备节点编号,然后对后续代码进行加锁,根据设备节点号检查对应的接收FIFO空间是否充足,如果空间不足则直接返回0,待该进程将FIFO中的数据读取后再次写入,如果剩余空间充足,则将应用进程的数据拷贝到dma buf中,对dma描述符进行相应配置并添加结束标识,如果当前描述符不是链表的首个,则清除前一个描述符的结束标识并将其下一个设置为当前描述符;随后执行唤醒操作,唤醒接收线程准备接收数据,如果描述符链表到达尾部,即当前描述符是描述符链表的最后一个,则启动发送,等待发送结束后返回应用进程写入的数
3.根据权利要求2所述的支持多进程的FPGA xdma驱动方法,其特征在于:接收FIFO空间是否充足的判据为:FIFO剩余空间不少于DMA buf的总空间。
4.根据权利要求2所述的支持多进程的FPGA xdma驱动方法,其特征在于:所述延迟时间为50ms。
5.根据权利要求1所述的支持多进程的FPGA xdma驱动方法,其特征在于:本方法实现数据读取的过程为:当应用程序通过设备节点读取数据时,调用驱动程序的读取接口,驱动程序的读取接口首先获取当前读取数据的设备节点编号,根据节点编号检查对应的FIFO是否有数据,如果没有数据直接返回0,如果有数据则读取私有协议头部,解析当前包的长度,根据长度将数据拷贝到应用程序的buf中,返回数据长度。
6.根据权利要求1所述的支持多进程的FPGA xdma驱动方法,其特征在于:本方法设有接收线程,接收线程启动时设定idle和busy两种状态下接收线程的运行时间,idle表示没有数据传输时的状态,busy表示持续有数据传输时的状态,随后接收线程开始循环执行以下操作:首先读取FPGA寄存器,判断是否有新数据到达,如果没有,则判断idle状态是否超时,如果超时则使接收线程进入休眠,等待被唤醒或者睡眠时间到达后重新设置idle和busy状态时接收线程运行时间;如果读取FPGA寄存器有新数据到达,则判断busy状态是否超时,如果超时则进入休眠,如果busy状态没有超时,则定位到描述链表的相应位置,读取数据,并根据协议解析数据,如果数据不符合协议则丢弃,如果符合协议则将数据存入对应的FIFO中,进行下一次循环。
7.根据权利要求1所述的支持多进程的FPGA xdma驱动方法,其特征在于:在驱动程序加载时指定设备节点的数量,指定方法为:insmod xdma.ko user_num=x, x表示要创建的设备节点数量。
8.根据权利要求1所述的支持多进程的FPGA xdma驱动方法,其特征在于:驱动程序在/dev/xdma 目录下创建多个设备节点。
...【技术特征摘要】
1.一种支持多进程的fpga xdma驱动方法,其特征在于:首先创建多个设备节点,每个设备节点对应一个进程,并创建多个fifo与设备节点一一对应,fifo用于缓存各个进程接收到的数据;各个进程封装私有协议后,通过对设备节点的读写实现数据接收和发送;单个设备节点同时只被一个进程打开。
2.根据权利要求1所述的支持多进程的fpga xdma驱动方法,其特征在于:本方法实现数据写入的过程为:当应用程序通过设备节点写入数据后,调用驱动程序的写入接口,驱动程序的写入接口首先获取当前写入数据的设备节点编号,然后对后续代码进行加锁,根据设备节点号检查对应的接收fifo空间是否充足,如果空间不足则直接返回0,待该进程将fifo中的数据读取后再次写入,如果剩余空间充足,则将应用进程的数据拷贝到dma buf中,对dma描述符进行相应配置并添加结束标识,如果当前描述符不是链表的首个,则清除前一个描述符的结束标识并将其下一个设置为当前描述符;随后执行唤醒操作,唤醒接收线程准备接收数据,如果描述符链表到达尾部,即当前描述符是描述符链表的最后一个,则启动发送,等待发送结束后返回应用进程写入的数量,如果当前描述符不是链表的最后一个,则设置延时时间,当延时时间到达后自动发送,如果延时时间到达前再次被设置,则前一次的延时时间被取消并重新计时。
3.根据权利要求2所述的支持多进程的fpga xdma驱动方法,其特征在于:接收fifo空间是否充足的判据为:fifo剩余空间不少于dma buf的总空间。
4.根据权利要求2所述的支持多进程的fpga xdma驱动方法,其特征在于:所述延迟时间为50ms。
5.根据权利要求1...
【专利技术属性】
技术研发人员:管彦亮,苏云学,王磊,
申请(专利权)人:山东华翼微电子技术股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。