APP下载

天脉1下龙芯1B网卡驱动设计与实现

2016-11-14王宏伟麦先根

电子科技 2016年10期
关键词:龙芯描述符网卡

梅 涛,王宏伟,麦先根

(中航工业西安计算技术研究所 基础软件室,陕西 西安710068)



天脉1下龙芯1B网卡驱动设计与实现

梅 涛,王宏伟,麦先根

(中航工业西安计算技术研究所 基础软件室,陕西 西安710068)

针对某嵌入式项目需要实现基于龙芯1B处理器的计算和以太网通信功能。文中采用龙心1B处理器集成两路千兆以太网,基于天脉1嵌入式实时操作系统,设计实现了龙芯1B处理器平台下双网卡以太网驱动。网卡驱动可同时支持基于以太网的调试和通信功能;也可通过一路网卡进行调试,同时使用另外一路网卡进行通信。实验结果证明,所设计实现的以太网驱动功能正确,在天脉1嵌入式操作系统下,能正确实现对龙芯1B处理器两路千兆网卡的控制;网卡驱动能正确,可靠地工作,以太网通信功能正常。

天脉1操作系统;龙芯1B处理器;以太网驱动;设计与实现

MEI Tao, WANG Hongwei, MAI Xiangen

(Basic Software Section, Aeronautical Computing Technique Research Institute, Xi’an 710068, China)

龙芯1B[1]是基于MIPS[2]架构的SOC[3],MIPS架构只有LOAD/STORE访存指令,在指令执行的过程中要求严格的按4字节对齐。随着国产化软硬件的推进,龙芯处理器在控制领域的使用越来越广泛。天脉1操作系统是一款嵌入式实时操作系统,具有高可靠、实时性等特点。天脉1操作系统提供基于BSD4.4[4]的以太网协议栈功能。某项目需要基于天脉1操作系统进行龙芯1B处理器的适配工作。龙芯1B处理器在外围集成了两个千兆的以太网控制器,需要提供独立的网卡驱动,用于支持以太网通信功能。

天脉1操作系统的网络驱动模型[5]如图1所示。为了实现多设备支持,在网络层协议与物理设备层之间提供了一个中间层,用于简化网卡驱动的设计。中间层实现网络协议层与具体网卡驱动之间的隔离,同时实现驱动与协议层之间的数据和指令的转发。该层为具体驱动的功能抽象,实现上层网络协议与底层设备之间的解耦,为设备和协议提供良好的扩展性。

图1 天脉1网络驱动模型

1 网络驱动结构

1.1 龙芯1B以太网驱动结构设计

龙芯1B集成两路10/100/1 000 M自适应的以太网适配器。两路网卡设备均兼容IEEE802.3标准。对网卡PHY芯片提供千兆模式(RGMII)[6]和百兆(MII)接口。两路网卡均支持半双工/全双工的工作模式,半双工模式下,支持冲突检测与重传机制(CSMA/CD)[6]。支持CRC校验码的自动生成和校验的功能。

为实现对龙芯1B的两路以太网控制器GMAC0/GMAC1的控制和驱动。根据使用需求配置以太网控制器的通信速率为百兆或者千兆模式。连接外部百兆PHY时,驱动中要复用两路脉冲信号和一路时钟信号。通过以太网控制器的GMAC寄存器和DMA寄存器,为两路物理网卡设置通信使用的MAC地址和DMA地址。

驱动程序中通过DMA描述符实现网卡设备与上层协议之间的数据交互。驱动中DMA描述符记录网络数据包的内存地址和状态。网卡驱动中使用不同的DMA描述符定义接收数据描述符和发送数据描述符。驱动中定义的DMA描述符的格式如图2所示,每一个DMA描述符包含两个数据缓冲,两个字节计数缓冲和两个指向数据缓冲地址的指针。驱动设计过程中必须保证DMA描述符的地址与系统总线的位宽对齐,同时网络字节序与系统字节序相同,龙芯1B处理器默认为小端模式。

图2 DMA描述符结构

1.2 网络数据结构设计

天脉1操作系统下,通过内存缓冲mbuf(memory buffer)[7]实现对网络数据包的管理和维护。设计实现的mbuf由包头和数据缓冲构成,数据包头由mBlk结构描述,数据缓冲由clBlk结构描述。每个clBlk结构对应一个数据簇,数据簇表示具体的数据块的构成;通过mBlk索引clBlk结构,实现由不同的数据块构成网络数据包的功能。网络数据包的构成如图3所示。

图3 网络数据包结构图

网络数据包的构造中,不同的mBlk结构通过索引同一个clBlk结构,实现对共享数据块的引用。通信过程中,通过传递mBlk结构实现数据交换的目的。同时在clBlk控制块中维护当前数据簇的引用计数[8],当数据簇的引用计数为0时,表示当前数据簇不再被使用,此时释放对应的数据簇空间。

2 网络驱动实现

天脉1操作系统下,网卡驱动需要实现以下功能模块:(1)网卡设备初始化;(2)网卡驱动空间初始化;(3)网卡数据转发;(4)网卡设备启动。龙芯1B以太网控制器初始化过程如图4所示。

图4 龙芯1B网卡初始化过程

2.1 网卡设备初始化

网卡设备初始化主要完成MAC层和PHY层的初始化。设置GMAC的配置参数,完成网卡MAC基地址,DMA基地址的配置,同时完成PHY基址的设置,并将配置参数设置到网卡驱动控制结构中。保证GMAC能够正确地访问对应的PHY芯片,读取网卡的MAC寄存器,链路状态,速率以及工作模式等信息。在设备初始化的过程中,同时包括初始化网卡的数据过滤策略,组播和多播策略;数据转发控制策略以及网卡时钟的初始化等工作。具体细节参考龙芯1B以太网控制器的用户手册。

网卡MAC层初始化过程中,设置网卡设备的MAC地址。龙芯1B集成了两个以太网控制器,在设置MAC地址的时候,针对不同的以太网控制器设置不同的MAC地址。在天脉1操作系统下,其中一路网卡实现通信与调试共用,通过获取调试代理为网卡配置的MAC地址,实现MAC地址的独立性,实现共用的目的;驱动中只需为另一路网卡设置独立的MAC地址,并将MAC地址信息设置到网卡驱动控制结构中。

网卡驱动设备列表中明确定义两路网卡设备的配置信息,提供设备单元号,设备的MAC基地址,对应的中断号等信息。明确指定需要启动的第一路网卡,将其作为设备列表中的第一项。在完成设备初始化工作后,根据使用需求启动第二路网卡。

2.2 网卡驱动空间初始化

龙芯1B的以太网控制器提供两种方式管理网卡的DMA描述符:(1)环式组织结构;(2)链式组织结构[9]。环式组织结构下,DMA描述符组成一个环形缓冲,最后一个缓冲的后续节点指向第一个节点。链式组织结构下,DMA描述符的第二个数据缓冲的指针指向下一个DMA描述符,依次构成一个链式结构。

天脉1下龙芯1B网卡驱动,采用环式组织结构,将DMA描述符组织成环形缓冲。网卡驱动空间初始化过程完成对DMA描述符缓冲空间的分配和构造。为每个数据缓冲分配DMA空间,同时将DMA描述符组织成环形结构。DMA描述符包括接收数据描述符和发送数据描述符。天脉1操作系统下,使用内存分配服务获得DMA描述符和数据缓冲空间。通过映射独立的IO空间,为网卡驱动所需的数据描述符结构分配空间。网卡驱动缓冲空间配置必须保证缓冲起始地址严格按照4 Byte对齐,否则数据访问过程会报告对齐异常。

2.3 数据转发处理

以太网驱动实现过程中选择中断方式进行数据处理。基于天脉1操作系统,龙芯1B处理器网卡驱动的中断处理过程如图5所示。

图5 龙芯1B网卡中断处理流程

根据中断号判断产生中断的网卡设备,进入网卡中断处理过程。首先禁止当前网卡的所有中断,获取中断类型,判断当前所发生的中断是发送中断还是接收中断;然后分别进入对应的中断处理例程。最后更新网卡中断状态寄存器,使能网卡中断。数据发送的处理过程如图6所示。

数据发送过程,停止对网卡设备队列的处理;获取可用的发送缓冲描述符,将需要发送的数据复制到对应的数据缓冲;启动网卡的数据发送处理,完成数据发送,更新网卡的中断状态寄存器;恢复对网卡设备队列的处理。数据接收中断的处理过程相对简单,将网卡收到的数据帧的内容直接传递给上层协议,更新网卡状态即完成一次接收中断的处理。为减小中断响应时间,具体数据包的处理通过后台网络任务完成。

图6 龙芯1B网卡发送数据过程

2.4 网卡设备启动

当上述初始化工作完成,网卡就处于就绪状态,使能网卡中断,网卡即可开始正常工作。使能网卡中断时,需要确保正确连接了网卡的中断处理程序。若网卡中断号与驱动中设置的不一致,天脉1操作系统会报告未预期的中断。至此,网卡驱动可正常工作。

3 测试与验证

测试过程中主要进行了黑盒测试和压力测试。黑盒测试验证网卡的输入能够获得正确的输出;压力测试主要测试网卡驱动工作的稳定性。黑盒测试通过读写网卡相关寄存器的方式进行验证。验证当数据帧到达,中断发生时网卡寄存器状态的变化。

压力测试选择基于UDP/TCP协议的以太网通信测试案例。测试过程中在PC机端通过网络抓包工具Wireshark[10]进行以太网数据的捕获,通过对比抓包工具所获取数据包的内容与发送数据内容,以验证网卡驱动功能是否正确。基于UDP协议的通信测试结果,如图7所示。

图7 基于UDP的通信测试结果

基于TCP协议的通信测试结果如图8所示。

图8 基于TCP的通信测试结果

实验结果证明,网卡驱动能准确响应各种命令请求,数据处理功能正确,网卡工作正常。

4 结束语

本文描述了天脉1嵌入式实时操作系统下,基于龙芯1B处理器平台的双网卡驱动的适配。天脉1操作系统是一款实时、可靠的嵌入式操作系统,该操作系统提供基于BSD4.4的TCP/IP网络协议栈功能,可支持基于RISC架构的PowerPC处理器以及基于MIPS架构的处理器平台。龙芯1B是一款兼容于MIPS架构的处理器平台,集成了两路千兆以太网控制器。本文设计实现了基于天脉1操作系统的龙芯1B处理器双网卡驱动,通过网卡驱动控制两路以太网设备,实现基于以太网的通信功能。通过实验验证,结果证明本文实现的网卡驱动功能正确可靠,以太网通信功能正常。

[1] 龙芯中科技术有限公司.龙芯1B处理器用户手册[M]. 北京:龙芯中科技术有限公司,2014.

[2] Dominic Sweetman.MIPS体系结构透视[M].李鹏,鲍峥,石洋,等,译.北京:机械工业出版社,2008.

[3] 郭兵,沈艳,林永宏,等.SoC技术原理与应用[M].北京:清华大学出版社,2006.

[4] Paul Venezia.Get started with FreeBSD:A brief intro for linux users[M/OL].(2014-12-06)[2015-11-10] http://www.infoworld.com/article/2858288/unix/intro-to-freebsd-for-linux-users.html.

[5] 曹桂平.VxWorks设备驱动开发详解[M].北京:电子工业出版社,2011.

[6] IEEE-SA.IEEE Standard for Ethernet,IEEE 802.3[S].USA: IEEE,2012.

[7] Shahriyar R, Blackburn S M, Yang X, et al. Taking off the gloves with reference counting Immix[J]. Acm Sigplan Notices,2013, 48(10):93-110.

[8] Fall K R, Stevens R W. TCP/IP详解,卷1:协议[M].2版.北京:机械工业出版社,2012.

[9] 樊东东,莫澜.Linux内核源码剖析:TCP/IP实现[M].北京:机械工业出版社,2011.

[10] Free Software Foundation,Inc.Wireshark user’s guide[M].USA:Free Software Foundation,Inc,2004.

Design and Realization of the Network Driver for Loongson 1B in ACoreOS

A driver for the double Gigabit Ethernet cards integrated in the Loongson 1B processor on the Tianmai embedded real-time operating system is designed and implemented. The driver supports not only simultaneous Ethernet-based debugging and communication but also one card for debugging and the other for communication. Experimental results show that the designed Ethernet driver functions correctly for the Loongson 1B double Gigabit Ethernet cards on the Tianmai embedded operating system, realizing reliable operation and normal Ethernet communication functions.

ACoreOS RTOS; Loongson 1B processor; ethernet driver; design and realization

2015- 12- 26

国家某重点科研基金资助项目(MJ-S-2012-05)

梅涛(1984-),男,硕士,工程师。研究方向:嵌入式实时操作系统和网络。

10.16180/j.cnki.issn1007-7820.2016.10.016

TP316

A

1007-7820(2016)10-054-04

猜你喜欢

龙芯描述符网卡
基于国产化龙芯的动环数据采集系统
基于结构信息的异源遥感图像局部特征描述符研究
基于AKAZE的BOLD掩码描述符的匹配算法的研究
部署Linux虚拟机出现的网络故障
Server 2016网卡组合模式
基于深度学习的局部描述符
特征联合和旋转不变空间分割联合的局部图像描述符
“龙芯之父”胡伟武
龙芯发布新一代处理器产品
挑战Killer网卡Realtek网游专用Dragon网卡