CN109946955B - 一种双网冗余以太网控制器Linux网卡驱动控制器 - Google Patents
一种双网冗余以太网控制器Linux网卡驱动控制器 Download PDFInfo
- Publication number
- CN109946955B CN109946955B CN201910198907.6A CN201910198907A CN109946955B CN 109946955 B CN109946955 B CN 109946955B CN 201910198907 A CN201910198907 A CN 201910198907A CN 109946955 B CN109946955 B CN 109946955B
- Authority
- CN
- China
- Prior art keywords
- control module
- receiving
- module
- data
- phy
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种双网冗余以太网控制器Linux网卡驱动控制器,包括系统总线协议控制模块、控制状态寄存器模块、接收传输控制模块、接收数据缓冲区、冗余通道切换控制模块、MAC协议控制模块;系统总线协议控制模块用于接收系统总线,并分别连接控制状态寄存器模块和MAC协议控制模块,控制状态寄存器模块经接收传输控制模块分别与接收数据缓冲区和冗余通道切换控制模块连接,用于接收和发送GMII接口信号,MAC协议控制模块分别与控制状态寄存器模块和接收传输控制模块连接,MAC协议控制模块通过第一PHY管理模块接收或发送MII接口信号,用于实现以太网数据通信过程中的MAC层协议控制。本发明可靠性更高,实现了内存资源缓冲区和描述符分配、利用、回收准确高效。
Description
技术领域
本发明属于以太网数据通信技术领域,具体涉及一种双网冗余以太网控制器Linux网卡驱动控制器。
背景技术
冗余以太网控制器驱动适用于对可靠性和容错性要求较高的太网数据通信领域。目前针对LS-DOUBLE-NET-PCI双网冗余以太网控制器IP核没有相应的Windows,Linux等操作系统平台的驱动。目前,双网冗余驱动设计大都使用两个单独的网络设备结构体实现两个网络设备功能,在操作系统层面可以看到两个网络设备,冗余的实现采用内核Bonding模块实现,现有存在问题如下:
1.现有的Linux网卡驱动的总线架构多采用Linux操作系统提供的Platform总线架构或者设备树架构设计,设备参数在BSP中固化(需要修改内核),或者在设备树种固化(需要修改驱动),使得内核和设备驱动不具备通用性,设备更换后,内核就需要重新进行编译和安装;
2.现有的以太网控制器Phy驱动多采用驱动在NIC驱动中独立实现Phy驱动,无形中增加了工作量,该网络控制器的Phy驱动设计需要向操作系统提供Phy层读写的接口,实现网络控制器对和Phy控制器的控制,以及操作系统对Phy对芯片进行控制;
3.现有的冗余切换多使用操作系统自带Bonding接口实现,对系统维护人员要求较高,需要复杂的网络文件和命令的设置;
4.驱动在存储资源的分配,访问与回收这三个方面需要设计一套高效,准确,复杂的描述符环和缓冲区环系统,以保证在接收和发送的整个过程中,内存资源会被高效无泄漏得使用,在接收中断到来后并接收数据的时候,对环上已经使用的接收和发送资源进行回收核对描述符环进行设置;
5.现有的多功能设备的驱动实现方案基本上都要从逻辑上进行子设备的扩展;
6.现有的接收方式多使用中断触发包的接收,在数据包突发性强和带宽大的应用场合,只通过中断接收会大大减弱操作系统和CPU的性能。
发明内容
本发明所要解决的技术问题在于针对上述现有技术中的不足,提供一种双网冗余以太网控制器Linux网卡驱动控制器,不仅通过增加冗余链路提供产品可靠性和容错性,而且使用轮询和中断相结合的方法接收数据,在内存使用上,采用高效准确的DMA描述符环的设计方案,使用C语言进行编程设计,并在智能多协议板上通过原型验证测试,适用于高速,高可靠,可容错的以太网数据通信。
本发明采用以下技术方案:
一种双网冗余以太网控制器Linux网卡驱动控制器,包括系统总线协议控制模块、控制状态寄存器模块、接收传输控制模块、接收数据缓冲区、冗余通道切换控制模块、MAC协议控制模块;系统总线协议控制模块用于接收系统总线,并分别连接控制状态寄存器模块和MAC协议控制模块,控制状态寄存器模块经接收传输控制模块分别与接收数据缓冲区和冗余通道切换控制模块连接,用于接收和发送GMII接口信号,MAC协议控制模块分别与控制状态寄存器模块和接收传输控制模块连接,MAC协议控制模块通过第一PHY管理模块接收或发送MII接口信号,用于实现以太网数据通信过程中的MAC层协议控制。
具体的,控制状态寄存器模块用于对网络设备的工作状态进行设置和管理,控制状态寄存器模块依次经DMA块数据传输控制模块和发送传输控制模块与接收传输控制模块连接,发送传输控制模块用于实现数据包发送;接收传输控制模块接收控制状态寄存器模块发送的信号后依次经发送数据缓冲区和描述符访问控制模块将信息反馈给控制状态寄存器模块,描述符访问控制模块用于接收/发送描述符环,对描述符结构体进行连接。
进一步的,描述符访问控制模块用于接收/发送描述符环,对描述符结构体进行连接,实现管理和设置,DMA块数据传输控制模块依据描述符控制信息,实现通过系统总线与上层用户数据存储区域间的块数据传输,描述符访问控制模块控制DMA块数据传输控制模块对描述符进行访问,并根据获得的描述符内容将控制信息传递给发送传输控制模块和接收传输控制模块,同时将发送传输控制模块和接收传输控制模块返回的状态信息写入相应描述符。
进一步的,DMA块数据传输控制模块通过接收/发送描述符结构体描述硬件DMA收发参数,经中断管理模块与MAC协议控制模块连接,中断管理模块用于对管理数据接收中断,数据溢出处理。
更进一步的,DMA块数据传输控制模块的收发参数包括收发数据长度、收发数据映射的缓冲区地址、数据连接指向和数据包索引。
6、根据权利要求4所述的双网冗余以太网控制器Linux网卡驱动控制器,其特征在于,中断管理模块与控制状态寄存器模块双向连接。
具体的,接收数据缓冲区和冗余通道切换控制模块分别与MAC协议控制模块连接,接收数据缓冲区用于接收缓冲区环,对Linux操作系统中的结构体skb_buff进行连接,在收发结束后进行内存资源和DMA回收和管理;冗余通道切换控制模块用于在冗余的网络链接状态发生变化时,智能切换到链路状态良好的通信通道。
具体的,MAC协议控制模块的MAC层协议控制包括发送过程中MAC层数据组帧,接收过程中MAC层数据帧解析,数据的CRC校验产生,CDMA/CD功能,数据合法性检查以及地址过滤。
具体的,MAC协议控制模块还连接有第二PHY管理模块,第二PHY管理模块作为冗余通道,第一PHY管理模块和第二PHY管理模块用于在网络控制器初始化过程对外部PHY芯片进行功能配置,并且在通信过程中对外部PHY进行实时监控,在物理链接状态发生变化时,向主控模块返回链路状态,PHY驱动主要实现对PHY寄存器块的读写,寄存器初始化值的配置,PHY链路检测功能的实现。
具体的,驱动控制器包括功能为:PCI系统总线对设备的初始化/注销;4KB发送缓冲区,16KB接收缓冲区,全双工数据存储;DMA块数据传输;10/100/1000Mbps链路自适应;支持流控;前导码和起始帧标识自动插入和卸载;CRC校验码和填充自动插入和卸载;前导码可编程设置;帧间隔可编程设置;自主获取外部PHY芯片状态;冗余通道切换小于30毫秒。
与现有技术相比,本发明至少具有以下有益效果:
本发明的网络控制器驱动的冗余设计对用户透明,用户不需要在操作系统层面对两个网络设备进行绑定设置,无需使用Bonding模块,在操作系统层面仅可以看到一个网络功能设备,设计符合PCI Linux设备驱动接口规范,采用软件切换或者硬件切换可配置实现两路以太网冗余功能,实现了通过DMA对千兆以太网数据的接收和发送,能高效地对链路状态作出反映以实现冗余切换,该驱动可以对多个协议的设备驱动进行融合并实现了多功能驱动接口。该网络控制器驱动基于自主研发IP核进行设计开发,目前已经实现完全自主可控。
进一步的,本发明的网络控制器的PCI总线部分的编码设计基于Linux PCI总线接口标准,使得内核更具通用性。
进一步的,由于操作系统中自带的Phy驱动接口,和本网卡控制器连接的Phy控制器为典型的Marvel 88e1111控制器,所以可以直接使用系统的Phy控制器驱动接口来直接初始化两路Phy控制器,工作量减少,代码可读性和层次性提高,由于Phy芯片通过PCI总线和网络控制器相连,Phy驱动的设计会更加便捷,Phy_Read和Phy_Write可以直接通过PCIBar空间寄存器映射进行。在读写的时候需要对两个冗余通道进行判断,从而选择对应通道的Phy寄存器基地址对其进行访问,与现有的通过MDIO软件接口访问Phy寄存器相关读写过程大为简化,代码复杂度也大为简化。
进一步的,本冗余设计完全对用户透明,并且由于双冗余的需求,本设计可以实现一套准确,快速,基于软件的双网冗余切换机制,可达到软件切换丢包不超过20包,硬件切换丢包不超过1包。
进一步的,本发明实现了多功能设备扩展接口,通过中断共享的方式实现多驱动的融合。由于该IP核集成了网卡控制器,CAN总线控制器,串口总线控制器,驱动在设计前期单独开发,后期只需要整合并共享中断,就能实现驱动软件的多功能特性。
进一步的,本设计使用轮询结合中断的方法对接收数据进行处理,提高了系统接收高速突发数据的能力,大大提高了内存使用的效率。在接收少量的数据包时使用中断接收,接收连续高速的包时,使用轮询,接收数据时关闭中断,并使用轮询进行后续数据包的接收,直到一轮接收完成,在采用中断进行接收。
综上所述,本发明中每个网络端口的数据传输率10/100/1000Mbps自适应,端口可容错切换,可靠性更高,实现了内存资源缓冲区和描述符分配、利用、回收准确高效;实现了轮询结合中断的方式进行接收,最大程度上减小对系统资源的占用率和CPU负载,对突发高速的数据可实现高效接收,最大程度上减少丢包率;两个网络端口间由软件进行切换,软件切换速丢包20包,硬件切换丢包不超过1包,冗余切换效率提高;收/发数据实现DMA块数据传输,数据传输效率提高,提供中断共享接口,多个驱动可以整合在一起,并且可实现无干扰,独立运行。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
图1为本发明控制器结构框图。
其中:1.系统总线协议控制模块;2.控制状态寄存器模块;3.中断管理模块;4.DMA块数据传输控制模块;5.描述符访问控制模块;6.发送传输控制模块;7.发送数据缓冲区;8.接收传输控制模块;9.接收数据缓冲区;10.冗余通道切换控制模块;11.MAC协议控制模块;12.第一PHY管理模块;13.第二PHY管理模块;14.系统总线;15.GMII接口信号;16.MII接口信号。
具体实施方式
本发明提供了一种双网冗余以太网控制器Linux网卡驱动控制器,用于多冗余以太网数据链路层控制以及介质访问层控制,完成毫秒级的冗余通道切换,并提供标准外部接口,便于构建终端系统,并且冗余切换控制编码独立于MAC协议控制编码以外,架构设计模块化。
驱动控制器具体功能包括:
PCI系统总线对设备的初始化/注销;4KB发送缓冲区,16KB接收缓冲区,全双工数据存储;DMA块数据传输;10/100/1000Mbps链路自适应;支持流控;前导码和起始帧标识自动插入和卸载;CRC校验码和填充自动插入和卸载;前导码可编程设置;帧间隔可编程设置;自主获取外部PHY芯片状态;冗余通道切换小于30毫秒。
请参阅图1,本发明一种双网冗余以太网控制器Linux网卡驱动控制器,包括系统总线协议控制模块1,控制状态寄存器模块2,中断管理模块3,DMA块数据传输控制模块4,描述符访问控制模块5,发送传输控制模块6,发送数据缓冲区7,接收传输控制模块8,接收数据缓冲区9,冗余通道切换控制模块10,MAC协议控制模块11,第一PHY管理模块12,第二PHY管理模块13,系统总线14,MAC协议控制模块外部PHY芯片的GMII接口信号15,MAC协议控制器外部PHY芯片的MII接口信号16。
系统总线协议控制模块1分别与系统总线14、控制状态寄存器模块2、MAC协议控制模块11、第一PHY管理模块12和第二PHY管理模块13连接,控制状态寄存器模块2分别与MAC协议控制模块11、中断管理模块3、DMA块数据传输控制模块4和描述符访问控制模块5连接,中断管理模块3分别与DMA块数据传输控制模块4和MAC协议控制模块11连接;DMA块数据传输控制模块4经发送传输控制模块6和接收传输控制模块8连接,接收传输控制模块8通过发送数据缓冲区7、描述符访问控制模块5与控制状态寄存器模块2连接;接收传输控制模块8还分别与MAC协议控制模块11、接收数据缓冲区9和冗余通道切换控制模块10连接,通过MAC协议控制模块11连接MII接口信号16,通过接收数据缓冲区9和冗余通道切换控制模块10接收和发送GMII接口信号15,接收数据缓冲区9和冗余通道切换控制模块10分别与MAC协议控制模块11连接,第一PHY管理模块12和第二PHY管理模块13用于接收和发送MAC协议控制器外部PHY芯片的MII接口信号16。
系统总线协议控制模块1用于PCI架构设备初始化/注销,符合Linux PCI总线接口规范的驱动需要实现的,网络设备驱动在加载后的PCI设备初始化工作,主要实现PCI Bar空间寄存器块的映射,Phy驱动的初始化,DMA映射初始化,MAC初始化,各种环结构体的初始化等等。
控制状态寄存器模块2用于对网络设备的工作状态进行设置和管理,主要涉及设备初始化、工作时的状态信息和控制信息管理。
中断管理模块3用于对管理数据接收中断,数据溢出等数据中断。
DMA块数据传输控制模块4通过接收/发送描述符结构体描述硬件DMA收发相关参数,如收发数据长度,收发数据映射的缓冲区地址,数据连接指向和数据包索引等。
描述符访问控制模块5用于接收/发送描述符环,对描述符结构体进行连接,以实现高效的管理和设置,DMA块数据传输控制模块4依据描述符控制信息,实现通过系统总线与上层用户数据存储区域间的块数据传输,描述符访问控制模块5控制DMA块数据传输控制模块4对描述符进行访问,并根据获得的描述符内容将控制信息传递给发送传输控制模块6和接收传输控制模块8,同时将发送传输控制模块6和接收传输控制模块8返回的状态信息写入相应描述符。
发送传输控制模块6用于实现数据包发送,将协议栈数据包缓冲区通过DMA映射,将数据发送到物理链路,数据包发送,发送传输控制模块6根据发送描述符控制信息,实现控制DMA对系统数据内存里的发送数据进行传输,并将数据发送至MAC协议控制模块。
接收传输控制模块8用于接收物理链路上的数据通过中断让网络控制器通过DMA填充到内存,在向上层协议栈提交,数据包接收,接收传输控制模块8根据接收描述符控制信息,接收MAC协议控制模块送来的接收数据,并控制DMA将接收数据传输给系统数据内存。
发送数据缓冲区7和接收数据缓冲区9用于接收/发送缓冲区环,对Linux操作系统中的结构体skb_buff进行连接,在收发结束后进行的一系列的内存资源和DMA回收和管理,以实现高效的资源回收利用设置。
冗余通道切换控制模块10用于在冗余的网络链接状态发生变化时,智能切换到链路状态良好的通信通道,保障网络通信的可靠性。
MAC协议控制模块11用于实现以太网数据通信过程中的MAC层协议控制,包括发送过程中MAC层数据组帧,接收过程中MAC层数据帧解析,数据的CRC校验产生,CDMA/CD功能,数据合法性检查以及地址过滤等。
第一PHY管理模块12和第二PHY管理模块13(冗余通道)用于在网络控制器初始化过程对外部PHY芯片进行功能配置,并且在通信过程中对外部PHY进行实时监控,在物理链接状态发生变化时,向主控模块返回链路状态,PHY驱动主要实现对PHY寄存器块的读写,寄存器初始化值的配置,PHY链路检测功能的实现。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中的描述和所示的本发明实施例的组件可以通过各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明一种双网冗余以太网控制器Linux网卡驱动控制器,包括结构体,符合Linux PCI总线接口规范的设备初始化/注销例程,设备启动/关闭/电源管理,DMA控制器模块的初始化,数据收/发,MAC接口驱动,Phy驱动接口驱动,链路检测与冗余切换功能模块,接收功能的实现,发送功能的实现。
1.重要的结构体:
101.网络设备结构体
内核网络设备结构体;PCI设备结构体;Bar空间基地址;任务队列结构体;DMA收/发映射的物理地址;收/发描述符环首地址;接收的环指示指针(当前位置,脏位置:在接收到缓冲区中,但是还未释放资源的数据指针);发送环指示指针(当前位置,脏位置:在发送缓冲区中,但还未被释放资源的数据指针);收/发缓冲区环首地址;Phy设备结构体;描述符操作函数指针结构体;DMA操作函数指针结构体;MAC操作函数指针结构体;Phy操作函数指针结构体。
102.接收描述符环结构体,由接收控制模块8和软件接收模块共同控制;
存储DMA使用权限(锁/令牌);第一缓冲区长度,第二缓冲区长度(在接收大包时使用);是否为描述符环末尾标志;中断标记标志位。
103.发送描述符环结构体,由发送控制模块6和软件发送模块共同控制;
存储DMA使用权限(锁/令牌);第一缓冲区长度,第二缓冲区长度(在接收大包时使用);是否为描述符环末尾标志;是否为分段的首/尾标志;中断标记标志位。
104.DMA操作函数指针结构体
核心初始化函数指针;打印DMA寄存器函数指针;DMA模式设置函数指针;DMA使能函数指针;DMA禁用函数指针;使能发送指针;开启/停止收/发函数指针;DMA中断处理指针;DMA异常处理函数指针。
105.MAC操作函数指针结构体,保存用于控制MAC协议控制模块11的函数接口,如广播管理,流控,校验和控制等;
核心初始化函数指针:打印MAC寄存器函数指针;主机中断状态读取函数指针;地址过滤器设置指针;流控设置指针;电源管理设置指针;设置广播地址指针;获取广播地址指针;获取通道信息指针;选择通道信息指针;设置帧间隔指针;设置速率指针;设置双工指针;设置环回指针;设置端口指针;设置前导码指针;设置发送/接收指针;设置混杂模式指针。
106.Phy操作函数指针结构体,实现软件冗余切换的功能,用来控制第一PHY管理模块12和第二PHY管理模块13
Phy寄存器读/写函数指针,PHY_Read和PHY_Write函数中分别为操作系统和驱动函数提供访问PHY管理模块的读写方法。
PHY_Read和PHY_Write函数中会实现对PHY管理模块12和13的链路状态的访问,通过获取PHY的链路状态,选择正在工作状态的PHY通道,如果链路发生变化导致切换,PHY_Read和PHY_Write函数可以判断出发生变化的PHY通道,进而获取工作状态PHY通道寄存器中的信息
在软切换模式,由软件驱动实现PHY链路的监控和通道的切换,软件驱动设计了定时监控任务,每10ms触发并对两个PHY通道的链路进行检测,正在工作的PHY在某一时刻链路断开,有软件对PHY冗余通道管理模块(图1,模块10)发送切换命令,促使通道发生变化。
在硬件切换模式,PHY管理模块本身对双通道PHY链路进行监控和维护,当工作状态的一路PHY通道发生故障时,PHY冗余通道管理模块(图1,模块10)立刻发现,并发出命令,促使通道发生切换。
由于链路的冗余切换工作的维护,监控在PHY层,对驱动来说,是透明的,两个通道在上层看来就是仅仅是一个虚拟的网络设备,二不是两个设备,这对操作系统的网络的管理来说,更加简单,完全不在需要驱动层次开发出冗余网络的管理软件。
107.描述符操作函数指针结构体,包含控制描述符访问控制模块5的函数接口API;
初始化接收/发送描述符指针;设置/获取接收/发送的DMA拥有权限指针;发送/接收状态指针;获取发送长度指针;获取接收长度指针;准备发送描述符;关闭发送描述符;释放发送描述符。
2.符合Linux PCI总线接口规范的设备初始化/注销例程
主要实现网络设备结构体资源的申请和设置;DMA,MAC,Phy的初始化设置;ethtool接口的实现;任务队列的初始化和启动;以及在启动过程中出现的各种故障的处理;注销工作对在启动工作中开启的资源做对应的关闭,释放处理。
3.设备启动/关闭/电源管理
启动:主要工作是对描述符环进行初始化设置,对描述符资源,缓冲区资源,DMA映射资源进行申请和初始化设置;
关闭:主要对启动时的相关资源进行释放;
电源管理:主要对PCI设备在开机,挂起,关机时设备的电源状态进行对应的设置。
4.DMA控制器模块的初始化,数据收/发
主要工作是将发送描述符环的首地址和接收描述符环的首地址填写到DMA控制器块中对应的寄存器。
5.MAC接口驱动
该部分主要实现MAC层数据组帧,接收过程中MAC层数据帧解析,数据的CRC校验产生,CDMA/CD功能,数据合法性检查以及地址过滤,主要的初始化工作在pci架构初始化函数probe中进行。
6.Phy驱动接口驱动
Phy驱动接口的实现主要是把两个Phy寄存器块映射到PCI Bar空间上,从Bar空间地址上直接读写两路Phy寄存器块的内容。
由于本网络控制器使用的Phy控制器是连接在外部的Marvel Phy控制器,需要对接OS提供的Phy驱动接口的连接函数(连接系统提供的Phy驱动),实现Phy连接回调函数(定时对链路进行包括双工,速率,自适应,流控等链路参数的检查和适配),并实现两路Phy寄存器块的读写函数,该部分初始化在pci架构初始化函数probe中进行,注销在pci架构注销函数remove中进行。
7.链路检测与冗余切换功能模块
用于实现链路的冗余切换,由操作系统任务队列定时通过检查Phy链路寄存器实现链路检查,如果链路状态发生变化,实时通知OS系统协议栈,并对链路状态参数重新设定,实时切换,可实现链路切换速度在30ms以内,任务队列的初始化在pci初始化函数probe中进行,任务队列的注销在pci注销函数remove中进行。
8.接收功能的实现:由接收初始化设置,数据接收过程,数据接收完毕的资源回收过程组成。
整个接收过程中会使用到的主要结构体和相关操作的硬件部位有:硬件接收缓冲区,接收描述符环,接收缓冲区地址环,接收缓冲区环。
801.接收初始化设置
为接收描述符环,接收缓冲区地址环,接收缓冲区环申请资源;
在接收描述符环的每个描述符中填写描述符的首尾信息和缓冲区DMA映射地址信息,在接收缓冲区地址环中填写相应接收缓冲区DMA映射地址,将每个接收描述符的OWN比特位设置为设备所有(设备主导接收,PC内存通过DMA接收设备接收的数据)。
在所有环都一一对应后,设置环首位置指针curr=0,脏环位置指针dirty=0,准备接收数据;
802.数据接收过程
第一包数据的中断到来时开始接收数据,关闭接收中断,开始从curr的当前位置(首包)轮询描述符直到最后一包数据(尾包),每收一包curr自增,dirty自增,向上层协议栈提交接收数据缓冲区指针,解除DMA映射;数据被网络设备接收到硬件接收缓冲区后(图1,模块9)有中断模块(图1,模块3)触发接收中断,此时该包数据的描述符的OWN比特位由网络设备模块(图1,模块4,5)自动设置为PC内存所有,此时由接收控制模块(图1,模块8)将触发DMA数据由硬件接收缓冲区(图1,模块9)到PC内存的传送,一包数据的接收即将完成。
803.数据接收完毕的资源回收过程
dirty自减,申请接收缓冲区资源,DMA映射新的接收缓冲区,重新填写描述符对应的接收申请缓冲区地址,补充到接收缓冲区环上,对该缓冲区块进行DMA映射,补充到接收描述符环和接收描述符地址环上,接收描述符的OWN比特位重新由驱动软件设置为网络设备所有,打开接收中断(控制模块3打开接收中断)。
9.发送功能的实现:由发送初始化设置,数据发送过程,数据发送完毕的资源回收过程组成。
整个发送过程中会使用到的主要结构体和相关操作的硬件部位有:硬件发送缓冲区,发送描述符环,发送缓冲区环。
901.发送初始化设置
为发送描述符环,发送缓冲区环申请资源;
在发送描述符环的每个描述符中填写描述符的首尾信息和缓冲区DMA映射地址信息。
在所有环都一一对应后,设置环首位置指针curr=0,脏环位置指针dirty=0,准备发送数据,驱动软件将待发送描述符的OWN比特位设置为PC内存所有(有PC主导发送,网络设备通过DMA接收PC内存的数据并进行发送)。
902.数据发送过程
将从协议栈下达的缓冲区指针通过DMA映射后,填入发送描述符的curr指向的当前描述符对应的位置中,软件使能DMA(图1,模块4)发送进行数据的发送,此时由网络设备(图1,模块4,5)将发送描述符的OWN比特位设置为网络设备所有,由传输控制模块(图1,模块6)触发DMA机制将PC内存中的数据搬移到网络设备模块的发送缓冲区(图1,模块7),有设备把缓冲区中的数据发送到网络中去,然后描述符的curr自增,dirty自增。
903.数据发送完毕的资源回收过程
dirty自减,解除DMA映射,释放缓冲区资源。
根据上述方案,用C语言对控制器驱动进行编写,编译,并完成控制器驱动的调试,测试结果表明本发明具有很好的可实施性,且性能满足预期。
以上内容仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明权利要求书的保护范围之内。
Claims (2)
1.一种双网冗余以太网控制器Linux网卡驱动控制器,其特征在于,包括系统总线协议控制模块(1)、控制状态寄存器模块(2)、接收传输控制模块(8)、接收数据缓冲区(9)、冗余通道切换控制模块(10)、MAC协议控制模块(11);系统总线协议控制模块(1)用于接收系统总线(14),并分别连接控制状态寄存器模块(2)和MAC协议控制模块(11),控制状态寄存器模块(2)经接收传输控制模块(8)分别与接收数据缓冲区(9)和冗余通道切换控制模块(10)连接,用于接收和发送GMII接口信号(15),MAC协议控制模块(11)分别与控制状态寄存器模块(2)和接收传输控制模块(8)连接,MAC协议控制模块(11)通过第一PHY管理模块(12)接收或发送MII接口信号(16),用于实现以太网数据通信过程中的MAC层协议控制;
控制状态寄存器模块(2)用于对网络设备的工作状态进行设置和管理,控制状态寄存器模块(2)依次经DMA块数据传输控制模块(4)和发送传输控制模块(6)与接收传输控制模块(8)连接,发送传输控制模块(6)用于实现数据包发送;接收传输控制模块(8)接收控制状态寄存器模块(2)发送的信号后依次经发送数据缓冲区(7)和描述符访问控制模块(5)将信息反馈给控制状态寄存器模块(2),描述符访问控制模块(5)用于接收/发送描述符环,对描述符结构体进行连接,描述符访问控制模块(5)用于接收/发送描述符环,对描述符结构体进行连接,实现管理和设置,DMA块数据传输控制模块(4)依据描述符控制信息,实现通过系统总线与上层用户数据存储区域间的块数据传输,描述符访问控制模块(5)控制DMA块数据传输控制模块(4)对描述符进行访问,并根据获得的描述符内容将控制信息传递给发送传输控制模块(6)和接收传输控制模块(8),同时将发送传输控制模块(6)和接收传输控制模块(8)返回的状态信息写入相应描述符;
DMA块数据传输控制模块(4)通过接收/发送描述符结构体描述硬件DMA收发参数,经中断管理模块(3)与MAC协议控制模块(11)连接,中断管理模块(3)用于对管理数据接收中断,数据溢出处理,中断管理模块(3)与控制状态寄存器模块(2)双向连接,DMA块数据传输控制模块(4)的收发参数包括收发数据长度、收发数据映射的缓冲区地址、数据连接指向和数据包索引;
接收数据缓冲区(9)和冗余通道切换控制模块(10)分别与MAC协议控制模块(11)连接,接收数据缓冲区(9)用于接收缓冲区环,对Linux操作系统中的结构体skb_buff进行连接,在收发结束后进行内存资源和DMA回收和管理;冗余通道切换控制模块(10)用于在冗余的网络链接状态发生变化时,智能切换到链路状态良好的通信通道;
MAC协议控制模块(11)还连接有第二PHY管理模块(13),第二PHY管理模块(13)作为冗余通道,第一PHY管理模块(12)和第二PHY管理模块(13)用于在网络控制器初始化过程对外部PHY芯片进行功能配置,并且在通信过程中对外部PHY进行实时监控,在物理链接状态发生变化时,向主控模块返回链路状态,PHY驱动主要实现对PHY寄存器块的读写,寄存器初始化值的配置,PHY链路检测功能的实现,MAC协议控制模块(11)的MAC层协议控制包括发送过程中MAC层数据组帧,接收过程中MAC层数据帧解析,数据的CRC校验产生,CDMA/CD功能,数据合法性检查以及地址过滤。
2.根据权利要求1所述的双网冗余以太网控制器Linux网卡驱动控制器,其特征在于,驱动控制器包括功能为:PCI系统总线对设备的初始化/注销;4KB发送缓冲区,16KB接收缓冲区,全双工数据存储;DMA块数据传输;10/100/1000Mbps链路自适应;支持流控;前导码和起始帧标识自动插入和卸载;CRC校验码和填充自动插入和卸载;前导码可编程设置;帧间隔可编程设置;自主获取外部PHY芯片状态;冗余通道切换小于30毫秒。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910198907.6A CN109946955B (zh) | 2019-03-15 | 2019-03-15 | 一种双网冗余以太网控制器Linux网卡驱动控制器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910198907.6A CN109946955B (zh) | 2019-03-15 | 2019-03-15 | 一种双网冗余以太网控制器Linux网卡驱动控制器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109946955A CN109946955A (zh) | 2019-06-28 |
CN109946955B true CN109946955B (zh) | 2022-11-01 |
Family
ID=67010079
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910198907.6A Active CN109946955B (zh) | 2019-03-15 | 2019-03-15 | 一种双网冗余以太网控制器Linux网卡驱动控制器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109946955B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112162890B (zh) * | 2020-09-24 | 2021-09-21 | 深圳市航顺芯片技术研发有限公司 | 一种mcu的dma压力测试方法、设备及存储介质 |
CN113312520B (zh) * | 2021-06-11 | 2023-05-02 | 西安微电子技术研究所 | 一种基于HASH和LRU算法的Linux模块化的并行冗余协议系统及数据处理方法 |
CN113722250B (zh) * | 2021-09-15 | 2024-09-27 | 南京全信传输科技股份有限公司 | 基于Aurora协议的双路冗余数据交换方法及系统 |
CN114615345B (zh) * | 2022-02-25 | 2022-10-14 | 广州鲁邦通物联网科技股份有限公司 | 工业现场总线多协议路由器系统及多协议转换方法 |
CN115174707B (zh) * | 2022-09-09 | 2022-11-15 | 井芯微电子技术(天津)有限公司 | 一种支持多协议dma引擎的方法、系统及电子设备 |
CN118277322A (zh) * | 2023-12-29 | 2024-07-02 | 卓品智能科技无锡股份有限公司 | 边缘计算网关、处理器间通讯配置方法和装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102761488B (zh) * | 2012-07-13 | 2015-06-17 | 中国航天科技集团公司第九研究院第七七一研究所 | 一种高速全双工交换以太网控制器 |
CN105790977A (zh) * | 2014-12-24 | 2016-07-20 | 国家电网公司 | 一种iec61850协议转换器中冗余以太网设计方法 |
CN104767697A (zh) * | 2015-01-23 | 2015-07-08 | 珠海欧比特控制工程股份有限公司 | 一种航空全双工交换式以太网控制器及其控制方法 |
CN105406998A (zh) * | 2015-11-06 | 2016-03-16 | 天津津航计算技术研究所 | 基于fpga的双冗余千兆以太网介质访问控制器ip核 |
CN105978762B (zh) * | 2016-04-27 | 2019-02-01 | 刘巍 | 冗余以太网数据传输设备、系统及方法 |
CN107370578B (zh) * | 2017-06-15 | 2020-11-06 | 西安微电子技术研究所 | 一种基于硬件快速自主切换的多冗余以太网控制器 |
-
2019
- 2019-03-15 CN CN201910198907.6A patent/CN109946955B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109946955A (zh) | 2019-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109946955B (zh) | 一种双网冗余以太网控制器Linux网卡驱动控制器 | |
CN100471156C (zh) | 数据总线桥接器及其工作方法 | |
CN105406998A (zh) | 基于fpga的双冗余千兆以太网介质访问控制器ip核 | |
CN101271332B (zh) | 紧凑型一体化冗余控制器及其控制方法 | |
US20110320706A1 (en) | Storage apparatus and method for controlling the same | |
US7885805B2 (en) | Apparatus, system, and method for simulating multiple hosts | |
CN108259127B (zh) | Pcie双冗余万兆网ip核 | |
JPH0687569B2 (ja) | 端末アダプタおよびデータ伝送方法 | |
CN104021102A (zh) | 基于状态机和片内总线的cpci串口板及其工作方法 | |
US11940942B2 (en) | Peripheral component interconnect express interface device and operating method thereof | |
CN110808908A (zh) | 跨平台实时切换冗余网络的系统和方法 | |
CN115941102B (zh) | 一种采用spi连接mcu和fpga的控制器间同步通信的方法 | |
CN105022869A (zh) | 一种快速可重构的mcu仿真方法 | |
CN113904970B (zh) | 一种半导体测试设备的传输系统及方法 | |
CN110971621A (zh) | 基于sdio接口的嵌入式多cpu互联电路、互联方法及驱动方法 | |
US7062754B2 (en) | Method for testing IEEE 1394 controllers | |
CN113886297A (zh) | 一种基于dma的spi并发通讯se装置及方法 | |
CN114615106B (zh) | 环形数据处理系统、方法以及网络设备 | |
CN108521416B (zh) | 一种ecn板卡 | |
CN111641544B (zh) | 一种can总线控制器并行测试系统 | |
CN103440218A (zh) | 基于usb-hid协议的can总线监控方法 | |
CN110188054B (zh) | 1553总线网络产品 | |
US20040174819A1 (en) | Physical layer (PHY) with smart cable analyzing (SCA) and apparatus employing the same | |
CN102868583A (zh) | 一种具有故障诊断功能的FlexRay总线节 | |
CN221768064U (zh) | 一种基于FPGA实现PCIE与RapidIO协议互联的系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |