一种基于RapidIO的高速传输实现方法转让专利

申请号 : CN201710769906.3

文献号 : CN107729281B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 杜默谭智敏钟松岩

申请人 : 北京计算机技术及应用研究所

摘要 :

本发明公开了一种基于RapidIO的高速传输实现方法,其中,包括:进行RapidIO驱动模块加载;进行主设备驱动加载;进行从设备驱动加载;进行高速传输驱动模块加载;进行高速传输驱动模块加载之后,进行设备打开;申请DMA通道;进行虚拟地址到物理地址的映射;将RapidIO地址映射到物理地址;进行主从设备间的通信,包括:发送数据采集指令;发送DMA数据包;通知接收设备DMA数据已发送;接收DMA数据;重复发送DMA数据包、通知接收设备DMA数据已发送以及接收DMA数据步骤,直到全部数据发送完毕;发送停止命令。本发明可以进行VPX架构下RapidIO总线下通过DMA进行大数据高速传输工作。

权利要求 :

1.一种基于RapidIO的高速传输实现方法,其特征在于,包括:进行RapidIO驱动模块加载;

进行主设备驱动加载;

进行从设备驱动加载;

进行高速传输驱动模块加载;

进行高速传输驱动模块加载之后,进行设备打开,包括:在接收端的驱动中注册一个doorbell响应请求函数,当设备接收到一个含有指定门铃号码的doorbell信号后,本地设备进行响应,执行doorbell响应请求函数中的行为;

在接收端的驱动中注册一个message入邮箱响应请求函数,当设备接收到message信号后,本地设备进行响应,执行message入邮箱响应请求函数中的行为;

在接收端的驱动中注册一个message出邮箱响应请求函数,当设备接收到message信号后,本地设备进行响应,执行message出邮箱响应请求函数中的行为;

进行message发送队列初始化;

申请DMA通道;

进行虚拟地址到物理地址的映射;

将RapidIO地址映射到物理地址;进行主从设备间的通信,包括:发送数据采集指令;

发送DMA数据包;

通知接收设备DMA数据已发送;

接收DMA数据;

重复发送DMA数据包、通知接收设备DMA数据已发送以及接收DMA数据步骤,直到全部数据发送完毕;

发送停止命令。

2.如权利要求1所述的基于RapidIO的高速传输实现方法,其特征在于,发送停止命令进一步包括:发送端将停止命令放入发送缓冲区,并给定发送缓冲区长度,将数据发送给接收端设备;接收端当收到message信号后读取邮箱中的数据,将邮箱中读取到的数据复制到message队列中,执行停止数据采集功能,清空数据接收队列,以便接受新的message数据。

3.如权利要求1所述的基于RapidIO的高速传输实现方法,其特征在于,全部数据发送完成后,主设备通过message功能发送停止指令,通知从设备结束数据采集工作。

4.如权利要求1所述的基于RapidIO的高速传输实现方法,其特征在于,发送数据采集指令包括:发送端将数据采集指令放入发送缓冲区,并给定发送缓冲区长度,将数据发送给接收端设备;接收端当收到message信号后读取邮箱中的数据,将邮箱中读取到的数据复制到message队列中,执行数据采集功能,清空数据接收队列,以便接受新的message数据。

5.如权利要求1所述的基于RapidIO的高速传输实现方法,其特征在于,发送DMA数据包包括:发送端定义DMA发送端描述符,定义DMA的传输方向,申请DMA通道,绑定待发送缓冲区,给定目的地址,配置发送端RapidIO的DMA数据,获取DMA描述符,确定数据已经完全发送完成,重置DMA应答标识位。

6.如权利要求1所述的基于RapidIO的高速传输实现方法,其特征在于,接收DMA数据包括:接收端收到一个doorbell后,得知在映射好的物理地址上已经收到数据,从设备读取映射好的DMA缓冲区中的数据并保存至本地。

7.如权利要求1所述的基于RapidIO的高速传输实现方法,其特征在于,主设备驱动加载的步骤,包括:(1)、加载“rapidio.ko”驱动,在加载时传入参数hdid,配置参数hdid为0;

(2)、加载“tsi721_mport.ko”驱动;

(3)、加载“rio-scan.ko”驱动,在加载时传入参数scan,配置参数scan为1。

8.如权利要求1所述的基于RapidIO的高速传输实现方法,其特征在于,从设备驱动加载的步骤为:(1)、加载“rapidio.ko”驱动,在加载时传入参数hdid,配置参数hdid为-1;

(2)、加载“tsi721_mport.ko”驱动;

(3)、加载“rio-scan.ko”驱动,在加载时传入参数scan,配置参数scan为0。

9.如权利要求1所述的基于RapidIO的高速传输实现方法,其特征在于,在加载扫描驱动后得到RapidIO设备rdev,对于主设备来说,rdev是从设备,对于从设备来说探测出来的rdev是主设备。

10.如权利要求1所述的基于RapidIO的高速传输实现方法,其特征在于,发送DMA数据包,包括:发送端:

定义DMA发送端描述符,包括:

定义DMA异步发送描述符,这个结构体中定义了包括DMA的cookie、物理地址以及通道号回调函数在内的一个描述符;

定义DMA的传输方向,包括:

DMA的传输方向分为双向传输、单向发送数据、单向读取数据以及无DMA传输;

绑定待发送缓冲区,包括:

将指定缓冲区的地址挂载到RapidIO DMA描述符上,发送的数据为该缓冲区中的数据;

给定目的地址,包括:

给定DMA发送的目的地址,该地址为RapidIO地址,DMA将缓冲区中的数据发送到指定的RapidIO地址上,接收端将该地址映射到本地物理地址,再将物理地址映射到虚拟地址,读取该虚拟地址中的数据即为DMA传输的数据,不断的向目的地址上发送连续的数据;

配置发送端RapidIO DMA数据,包括:

配置DMA发送端数据传输的信息,该数据包括IO列表、列表长度、RapidIO写方式以及RapidIO目的地址;

获取DMA描述符,包括:

通过rio_dma_prep_slave_sg()函数将RapidIO DMA数据赋给DMA描述符,该描述符将DMA数据发送到接收端;

DMA回调函数,包括:

在DMA数据包发送完成后通过描述符调用回调函数,该函数的调用说明DMA数据已经完全发送完成,不再影响后续数据的发送过程;

重置DMA应答标识位,包括:

DMA的发送过程已经结束,在数据包发送的过程中,DMA控制器给外设发送DMA应答信号,发送端应答信号DMA控制应答标识位置为1,在发送结束后,应当将该标识位重新重置,使其在数据包发送完成后处于可用状态。

说明书 :

一种基于RapidIO的高速传输实现方法

技术领域

[0001] 本发明设计一种数据传输方法,尤其基于RapidIO的高速传输实现方法。

背景技术

[0002] 现有的采用VPX体系架构的军用机计算机大多以Serial RapidIO 串行通信总线为系统互联总线,Serial RapidIO串行通信总线将会是未来军用计算机系统内部互联的主流方式;VPX计算机内部板卡通常基于专用RapidIO芯片(如IDT公司的TSI721)或者IP核的方式来构建互联接口,基于专用RapidIO芯片的方式的优势在于通信稳定性高,可靠性好,成本低,功能完备。
[0003] 相比硬件,国内外对Serial RapidIO软件研究较少,尤其是驱动程序开发和研究参考资料很少,官方提供的可用驱动是针对Windows平台,并未提供Linux平台的成熟驱动。

发明内容

[0004] 本发明的目的在于提供一种基于RapidIO的高速传输实现方法,用于解决上述现有技术的问题。
[0005] 本发明一种基于RapidIO的高速传输实现方法,其中,包括:进行RapidIO驱动模块加载;进行主设备驱动加载;进行从设备驱动加载;进行高速传输驱动模块加载;进行高速传输驱动模块加载之后,进行设备打开,包括:在接收端的驱动中注册一个doorbell响应请求函数,当设备接收到一个含有指定门铃号码的doorbell信号后,本地设备进行响应,执行doorbell响应请求函数中的行为;在接收端的驱动中注册一个message入邮箱响应请求函数,当设备接收到message 信号后,本地设备进行响应,执行message入邮箱响应请求函数中的行为;在接收端的驱动中注册一个message出邮箱响应请求函数,当设备接收到message信号后,本地设备进行响应,执行message出邮箱响应请求函数中的行为;进行message发送队列初始化;申请DMA通道;进行虚拟地址到物理地址的映射;将RapidIO地址映射到物理地址;进行主从设备间的通信,包括:发送数据采集指令;发送DMA数据包;通知接收设备DMA数据已发送;接收DMA数据;重复发送DMA数据包、通知接收设备DMA数据已发送以及接收DMA数据步骤,直到全部数据发送完毕;发送停止命令。
[0006] 根据本发明的基于RapidIO的高速传输实现方法,其中,发送停止命令进一步包括:发送端将停止命令放入发送缓冲区,并给定发送缓冲区长度,将数据发送给接收端设备;接收端当收到message信号后读取邮箱中的数据,将邮箱中读取到的数据复制到message队列中,执行停止数据采集功能,清空数据接收队列,以便接受新的 message数据。
[0007] 根据本发明的基于RapidIO的高速传输实现方法,其中,全部数据发送完成后,主设备通过message功能发送停止指令,通知从设备结束数据采集工作。
[0008] 根据本发明的基于RapidIO的高速传输实现方法,其中,发送数据采集指令包括:发送端将数据采集指令放入发送缓冲区,并给定发送缓冲区长度,将数据发送给接收端设备;接收端当收到message信号后读取邮箱中的数据,将邮箱中读取到的数据复制到message队列中,执行数据采集功能,清空数据接收队列,以便接受新的message 数据;
[0009] 根据本发明的基于RapidIO的高速传输实现方法,其中,发送 DMA数据包包括:发送端定义DMA发送端描述符,定义DMA的传输方向,申请DMA通道,绑定待发送缓冲区,给定目的地址,配置发送端RapidIO的MA数据,获取DMA描述符,确定数据已经完全发送完成,重置DMA应答标识位;
[0010] 根据本发明的基于RapidIO的高速传输实现方法,其中,接收 DMA数据包括:接收端收到一个doorbell后,得知在映射好的物理地址上已经收到数据,从设备读取映射好的DMA缓冲区中的数据并保存至本地。
[0011] 根据本发明的基于RapidIO的高速传输实现方法,其中,主设备驱动加载的步骤,包括:1、加载“rapidio.ko”驱动,在加载时传入参数hdid,配置参数hdid为0;2、加载“tsi721_mport.ko”驱动;3、加载“rio-scan.ko”驱动,在加载时传入参数scan,配置参数scan为1。
[0012] 根据本发明的基于RapidIO的高速传输实现方法,其中,从设备驱动加载的步骤为:1、加载“rapidio.ko”驱动,在加载时传入参数hdid,配置参数hdid为-1;2、加载“tsi721_mport.ko”驱动; 3、加载“rio-scan.ko”驱动,在加载时传入参数scan,配置参数 scan为0。
[0013] 根据本发明的基于RapidIO的高速传输实现方法,其中,在加载扫描驱动后得到RapidIO设备rdev,对于主设备来说,rdev是从设备,对于从设备来说探测出来的rdev是主设备。
[0014] 根据本发明的基于RapidIO的高速传输实现方法,其中,发送 DMA数据包,包括:发送端:定义DMA发送端描述符,包括:定义 DMA异步发送描述符,这个结构体中定义了包括DMA的cookie、物理地址以及通道号回调函数在内的一个描述符;定义DMA的传输方向,包括:DMA的传输方向分为双向传输、单向发送数据、单向读取数据以及无DMA传输;绑定待发送缓冲区,包括:将指定缓冲区的地址以及挂载到RapidIO DMA描述符上,发送的数据为该缓冲区中的数据;给定目的地址,包括:给定DMA发送的目的地址,该地址为RapidIO 地址,DMA将缓冲区中的数据发送到指定的RapidIO地址上,接收端将该地址映射到本地物理地址,再将物理地址映射到虚拟地址,读取该虚拟地址中的数据即为DMA传输的数据,不断的向目的地址上发送连续的数据;配置发送端RapidIO DMA数据,包括:配置DMA发送端数据传输的信息,该数据包括IO列表、列表长度、RapidIO写方式以及 RapidIO目的地址地址;获取DMA描述符,包括:通过 rio_dma_prep_slave_sg()函数将RapidIO DMA数据赋给DMA描述符,该描述符将DMA数据发送到接收端;DMA回调函数,包括:在DMA数据包发送完成后通过描述符调用回调函数,该函数的调用说明DMA数据已经完全发送完成,不再影响后续数据的发送过程;重置DMA应答标识位,包括:DMA的发送过程已经结束,在数据包发送的过程中,DMA 控制器给外设发送DMA应答信号,发送端应答信号DMA控制应答标识位置为1,在发送结束后,应当将该标识位重新重置,使其在数据包发送完成后处于可用状态。
[0015] 本发明的基于RapidIO的高速传输实现方法,基于业界最成熟的专用TSI721芯片方案,着眼开发并移植适合Linux平台下的驱动程序,为处理器板,高速记录存储板两类基础板卡之间的Serial RapidIO通信提供驱动层支持,并进行演示验证的应用层开发,借助“下一代地面雷达计算机”的样机研制契机,突破Serial RapidIO驱动共性技术。通过TSI721转换芯片实现了数据由PCIE向RapidIO转换的过程,主要用于满足武器系统雷达数据处理机大数据量交换传输的需求,在主机板和存储板/数据记录板之间传输数据。

附图说明

[0016] 无

具体实施方式

[0017] 为使本发明的目的、内容、和优点更加清楚,下面结合实施例,对本发明的具体实施方式作进一步详细描述。
[0018] RapidIO大容量数据传输驱动的实现过程包括RapidIO驱动模块加载过程以及doorbell、message、DMA通信功能的实现。针对X86主处平台RapidIO串行通信协议驱动开发,该实施例实现的通信功能如表1所示。
[0019] 表1
[0020]
[0021] 高速数据采集过程是主设备发送数据,从设备接收数据并存储的过程,该过程首先通过发送数据采集指令通知从设备进行数据采集工作,之后主设备发送数据,在主设备发送完成后,发送数据发送完成指令,结束数据采集过程。该过程通过将doorbell功能、message功能与DMA功能相结合来实现的。
[0022] 本发明一种基于RapidIO的高速传输实现方法,包括:
[0023] S1、RapidIO驱动模块加载过程,包括:
[0024] 在本实施例中需将RapidIO驱动以模块形式编译,独立于内核之外进行加载,Linux内核中提供了TSI721的RapidIO驱动文件,该驱动位于“drivers/rapidio”路径下。
[0025] RapidIO数据传输过程需要区分主从设备,通过主设备控制链路上所有的从设备。因此,需要首先设置存储板与数据记录板为从板,在加载过从板驱动后加载主板驱动,否则扫描结果将会出错。其中存储板默认为从板,不需要进行额外操作,数据记录板需要在主板扫描之前进行从板属性配置工作。在加载过程中需要先加载从设备的 RapidIO驱动,加载完成后再进行主设备的驱动加载过程。如果顺序发生错误,则需要对系统进行断电重启操作。
[0026] S2、主设备驱动加载的步骤,包括:
[0027] 1、加载“rapidio.ko”驱动,该驱动提供了对映射、rio设备、端口数据的发送接收以及对doorbell、message、DMA等功能的支持。该驱动需要在加载时传入参数hdid,配置参数hdid为-1;
[0028] 2、加载“tsi721_mport.ko”驱动,该驱动为TSI721芯片驱动,提供了对TSI721的端口操作以及DMA数据传输功能的支持;
[0029] 3、加载“rio-scan.ko”驱动,该驱动主要对整个链路进行扫描,动态将链路中的所有TSI721转换芯片以及交换板上的桥接芯片扫描出来,并写入路由表。该驱动需要在加载时传入参数scan,配置参数 scan为0对整个链路进行扫描。
[0030] S3、从设备驱动加载的步骤为:
[0031] 1、加载“rapidio.ko”驱动,该驱动提供了对映射、rio设备、端口数据的发送接收以及对doorbell、message、DMA等功能的支持。该驱动需要在加载时传入参数hdid,配置参数hdid为0;
[0032] 2、加载“tsi721_mport.ko”驱动,该驱动为TSI721芯片驱动,提供了对TSI721的端口操作以及DMA数据传输功能的支持;
[0033] 3、加载“rio-scan.ko”驱动,该驱动主要对整个链路进行扫描,动态将链路中的所有TSI721转换芯片以及交换板上的桥接芯片扫描出来,并写入路由表。该驱动需要在加载时传入参数scan,配置参数 scan为1对整个链路进行扫描。
[0034] 结果:在加载扫描驱动后得到RapidIO设备rdev,对于主设备来说,rdev是从设备,对于从设备来说探测出来的rdev是主设备。通过对rdev设备进行操作实现主设备与从设备间的数据传输工作。
[0035] S4、高速传输驱动模块加载过程包括:
[0036] S41、设备探测过程,包括:
[0037] 在完成设备扫描的基础上,进行高速传输驱动模块加载过程。通过上一过程扫描得到的远端设备与设备列表中设备的厂商号和设备号进行匹配,匹配成功,加载该远端设备,没有匹配成功则不能加载。如果此时拓扑结构上存在多个设备,那么需要为每个设备加载一个与其相适应的厂商号和设备号的驱动即可。完成高速传输驱动模块的加载过程。
[0038] S42、打开设备过程,包括:
[0039] 在探测到设备之后,进行打开设备的工作:
[0040] 1、在接收端的驱动中注册一个doorbell响应请求函数,当设备接收到一个含有指定门铃号码的doorbell信号后,本地设备进行响应,执行响应函数中的行为;
[0041] 2、在接收端的驱动中注册一个message入邮箱响应请求函数,当设备接收到message信号后,本地设备进行响应,执行响应函数中的行为;
[0042] 3、在接收端的驱动中注册一个message出邮箱响应请求函数,当设备接收到message信号后,本地设备进行响应,执行响应函数中的行为;
[0043] 4、message发送队列初始化;
[0044] 5、DMA通道申请。TSI721芯片提供了8路DMA通道,在RapidIO总线上申请一个DMA通道,通过该通道可以进行DMA数据传输;
[0045] 6、虚拟地址到物理地址的映射。计算机读取数据是在虚拟地址中读取数据,而DMA是对物理地址进行操作,因此,为了读取DMA传输的数据,需要首先将物理地址映射到虚拟地址;
[0046] 7、将RapidIO地址映射到物理地址。通过RapidIO进行的DMA数据传输过程,目的地址为RapidIO地址,并不是目的设备的物理地址,因此需要将RapidIO地址与目的设备的物理地址相映射;
[0047] 步骤S5、主从设备间的通信过程,包括:
[0048] 本过程通过message功能发送指令,控制接收端设备进行数据采集或者停止数据采集过程。表2为指令表。
[0049] 表2
[0050]指令名称 指令ID
数据采集 0x0101
停止命令 0x010F
[0051] 1、发送数据采集指令,包括:
[0052] 发送端:
[0053] 将数据采集指令放入发送缓冲区,并给定发送缓冲区长度,通过 message发送函数将数据发送给接收端设备。
[0054] 接收端:
[0055] 当收到message信号后读取邮箱中的数据,将邮箱中读取到的数据复制到message队列中,执行数据采集功能,清空数据接收队列,以便接受新的message数据。
[0056] 2、发送DMA数据包,包括:
[0057] 发送端:
[0058] (1)定义DMA发送端描述符
[0059] 定义DMA异步发送描述符,这个结构体中定义了包括DMA的 cookie、物理地址、通道号回调函数等在内的一个描述符;
[0060] (2)定义DMA的传输方向
[0061] DMA的传输方向分为双向传输、单向发送数据、单向读取数据以及无DMA传输,这里定义DMA的传输方向为双向传输;
[0062] (3)DMA通道申请
[0063] TSI721芯片提供了8路DMA通道,在RapidIO总线上申请一个DMA 通道,通过该通道可以进行DMA数据传输;
[0064] (4)绑定待发送缓冲区
[0065] 将指定缓冲区的地址以及挂载到RapidIO DMA描述符上,发送的数据为该缓冲区中的数据;
[0066] (5)给定目的地址
[0067] 给定DMA发送的目的地址,该地址为RapidIO地址,DMA将缓冲区中的数据发送到指定的RapidIO地址上,接收端将该地址映射到本地物理地址,再将物理地址映射到虚拟地址,读取该虚拟地址中的数据即为DMA传输的数据,通过不断的向目的地址上发送连续的数据,实现大数据量的传输过程;
[0068] (6)配置发送端RapidIO DMA数据
[0069] 配置DMA发送端数据传输的信息,该数据包括IO列表、列表长度、 RapidIO写方式以及RapidIO目的地址地址。
[0070] (7)获取DMA描述符
[0071] 通过rio_dma_prep_slave_sg()函数将RapidIO DMA数据赋给DMA 描述符,该描述符将DMA数据发送到接收端;
[0072] (8)DMA回调函数
[0073] 在DMA数据包发送完成后通过描述符调用回调函数,该函数的调用说明DMA数据已经完全发送完成,不再影响后续数据的发送过程。
[0074] (9)重置DMA应答标识位
[0075] DMA的发送过程已经结束,在数据包发送的过程中,DMA控制器给外设发送DMA应答信号,发送端应答信号DMA控制应答标识位置为1。在发送结束后,应当将该标识位重新重置,使其在数据包发送完成后处于可用状态。这里,DMA共有128个队列,每次使用一个队列,若不重置DMA控制应答标识位,会出现只能发送128包数据的问题。
[0076] 3、通知接收设备DMA数据已发送,包括:
[0077] 由于RapidIO的DMA功能只是发送数据到指定地址,不会发送中断,目的设备不知道已经接收到发送端发送过来的数据。在DMA数据包发送完成之后,在发送端通过调用doorbell发送函数,发送指定数据给接收端设备,通知目的设备从地址中取出数据。
[0078] 4、DMA数据接收,包括:
[0079] 接收端收到一个doorbell后,得知在映射好的物理地址上已经收到数据,从设备读取映射好的DMA缓冲区中的数据并保存至本地,实现DMA数据的接收功能。
[0080] 5、连续数据发送,包括:
[0081] 重复第2、3、4步,直到全部数据发送完毕;
[0082] 6、发送停止命令
[0083] 全部数据发送完成后,主设备通过message功能发送停止指令,通知从设备结束数据采集工作。
[0084] 发送端:
[0085] 将停止命令放入发送缓冲区,并给定发送缓冲区长度,通过 message发送函数将数据发送给接收端设备。
[0086] 接收端:
[0087] 当收到message信号后读取邮箱中的数据,将邮箱中读取到的数据复制到message队列中,执行停止数据采集功能,清空数据接收队列,以便接受新的message数据。
[0088] 步骤S6、驱动模块的卸载,包括:
[0089] 在卸载驱动时,需要调用函数释放doorbell功能。
[0090] 在卸载驱动时,需要调用函数释放message入邮箱功能。
[0091] 在卸载驱动时,需要调用函数释放message出邮箱功能。
[0092] 在卸载驱动时,需要调用函数释放DMA通道。
[0093] 至此,完成了高速数据采集过程。经过测试,该过程数据传输速率可以达到700MB/s,实现了VPX架构下的高速数据传输过程。
[0094] TSI721芯片包括8个DMA通道,本专利不局限与其中任何一个通道。
[0095] 本发明一种基于RapidIO的高速传输实现方法,可以通过RapidIO 驱动程序驱动TSI721芯片工作,从而进行VPX架构下RapidIO总线下通过DMA进行大数据高速传输工作。在实际应用中可以通过同时注册8路DMA通道,实现多路并行传输过程。
[0096] 以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。