当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]VxWorks系统下的RTL8139驱动程序改进

引言

RTL8139是台湾Realtek半导体公司生产的一种快速以太网控制器,提供符合PCI2.2标准的接口,兼容IEEE802.3u 100BASE-T规范,支持IEEE-802.3x全双工流量控制,支持10Mbit.s-1/100Mbit.s-1全双工、半双工自适应,价格便宜,性能稳定,是PC机、电信终端产品中应用最多的以太网控制器之一。RTL8139在各种操作系统下的驱动都能从Realtek公司网页下载,其中包括 VxWorks系统下的驱动,而且提供C源代码。但是在嵌入式系统下,针对不同的硬件平台,往往需要修改该驱动程序以提高其稳定性和效率。基于 MPC8241 CPU的硬件平台,本文提出RTL8139在VxWorks系统下驱动程序的改进措施。

1 硬件平台简介

图1所示为某交换机终端设备的部分硬件框图。 


 
CPU采用Motorola公司的PowerPC系列处理器之一的MPC8241,该芯片除嵌入32位 PowerPC处理器内核外,还集成了MPC107桥,提供PCI接口与RTL8139连接,桥上有内存控制器,挂16MB SDRAM和4 MBFlash。CPU时钟是166MHz,SDRAM时钟是66MHz,PCI时钟是33MHz,RTL8139工作在10Mbit/s,半双工方式,通过集线器(HUB)连入Internet,其作用是转发由话音信号打成的数据包,要求1200pps(每秒数据包),且CPU占用率不高于50%。

VxWorks支持END(增加型网络驱动)格式的以太网控制器驱动,提供MUX层作为网络协议和以太网控制器驱动间的接口,MUX规定了驱动的接口函数,RTL8139驱动程序Rtl8139End.c是完全按照END格式编写的代码,提供了所有MUX层规定的接口函数,只要写好RTL8139 PCI配制空间寄存器,在sysRtl8139End.c中传入PCI空间首地址、中断向量号和中断优先级参数,按照END格式驱动装载程序,装载成功后 RTL8139就能顺利运行。

2 驱动程序中需要解决的问题

如果数据包的收发速率是均匀的,RTL8139完全可以达到前文提出的要求,但是Internet上经常有突发的数据包,而RTL8139的接收FIFO和发送FIFO 都只有2Kb,加之RTL8139对收发数据包采取完全拷贝方式,在数据包突发期间,CPU占用率过高,来不及处理过多的数据包,从而造成丢包。在 Rtl8139End.c中,驱动的数据包缓冲和协议栈的内存池是完全分开的,数据包接收和发送都有1次拷贝过程,而高性能以太网控制器一般只在发送时需要拷贝1次,这样每收发一个包,CPU需要多拷贝1次,这是导致RTL8139性能不高的重要原因,但这种包处理方式是由硬件决定的,驱动程序不能改变。事实上,在突发包很多的情况下,以太网控制器丢包是允许的,但突发时间过后,应恢复正常的收发包流程。但在前文介绍的硬件平台上运行 Rtl8139End.c,在PC机上用Sniffer以连续方式给RTL8139发数据包,测试时间为数十秒,停止发包后,在PC机上用ping命令测试RTL8139能否正常回包,结果不能ping通,表明RTL8139的收发包流程因突发包太多而中断,且不能恢复。

分析Rtl8139End.c程序,其发送数据包流程如图2所示。


 
RTL8139有4个发送描述符,有各自的发送状态寄存器TSD0~TSD3和发送起始地址寄存器TSAD0~TSAD3,每个发送描述符可发送1个数据包。在函数Rtl8139Send()中申请1个发送数据包缓冲区,将协议栈传下来的数据包拷贝进该缓冲区,然后将该缓冲区的首地址写入发送起始地址寄存器,最后填写发送状态寄存器,并将其OWN位置0,表示将该缓冲区交给RTL8139的发送DMA管理,启动发送操作。发送完成后 RTL8139产生中断,进人中断服务程序Rtl8139Int(),调用Rtl8139HandleSendInt(),在该函数中读取发送状态寄存器。如果OWN位为1,则表示发送DMA操作完成,释放相应的发送缓冲;否则表示发送DMA操作未完成,该发送缓冲仍由RTL8139硬件所有,下次进入发送中断再重新查看OWN位。如此循环往复,直到OWN位变为1,才能释放相应的发送缓冲,其占用的发送描述符变为可用。

以上过程可归结为两点:

  a)在Rtl8139Send()中申请1个数据包缓冲区,占用1个发送描述符;

  b)在Rtl8139Int()中释放相应的数据包缓冲区和发送描述符。

从以上分析可以看出,只要发包的这两个环节不出问题,发包流程就不会中断,另外,在Rtl8139HandleSendInt()中,不是仅仅释放1个包缓冲和描述符,而是将所有启动过发包操作、发送状态寄存器的OWN位变为1的描述符和相应包缓冲都释放掉。这样可增强程序的稳定性,在有突发包的情况下,CPU可能来不及响应中断,即造成中断丢失,但只要还有1个描述符可用,发包完成后能进中断,就可以把以前占用的缓冲和描述符全部释放掉。如果突发包太多,CPU连续4个发包中断未响应,发送描述符全被占用,下次进入Rtl8139Send()将无发送描述符可用,也就不会再有发包中断, Rtl8139HandleSendInt()不会被调用,发送描述符无法释放,发包流程就此中断,不能恢复,这就是上述RTL8139不能ping通的原因。

[!--empirenews.page--]

3 解决办法

根据以上分析,只有将被占用的发送描述符和发送缓冲释放,发包流程才能恢复,这只要调用一次Rtl8139HandleSendInt()就能实现。MPC8241片内集成有4个定时器 (TimerO~Timer3),可以使用其中的TimerO来产生硬件定时中断。在中断服务程序中,以Rtl8139HandleSendInt函数指针作为入口参数调用netJobAdd(),这样就可以定时执行Rtl8139HandleSendInt(),及时释放被占用的发送描述符。这需要在 Rtl8139Start()中添加如下代码:

其中:(pDrvCtrl->TxRingFree<0)表示没有空闲发送描述符。

修改后的驱动再用前文介绍的方法测试,Sniffer发包停止后,RTL8139能恢复。改用Smartbit测试,以半双工、10 Mbit/s线速给RTL8139发包,发包停止后,RTL8139仍能恢复。用Smartbit以1 200pps匀速率给RTL8139发包,包长240字节。测试结果为:RTL8139不丢包,CPU占用率45%。

4 结束语

采用本文介绍的方法改进RTL8139驱动,能有效地增强程序的鲁棒性,又不会降低效率,在交换机终端上长时间运行稳定,性能完全满足要求。
 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

随着全球半导体供应链复杂化,硬件木马(Hardware Trojan)已成为威胁芯片安全的关键风险。本文提出一种基于形式化验证的多层硬件木马检测框架,覆盖寄存器传输级(RTL)、门级网表(Gate-Level Netli...

关键字: 形式化验证 RTL

随着汽车电子系统向域控制器架构演进,异构计算单元(如MCU、GPU、AI加速器)的功耗协同控制成为关键挑战。本文提出一种基于RTL级建模的动态电压频率调节(DVFS)技术,通过建立多域功耗-时序联合模型,实现汽车电子系统...

关键字: RTL DVFS 汽车电子

在数字集成电路设计中,时钟门控技术是降低动态功耗的关键手段。随着芯片规模和复杂度的不断增加,对时钟门控技术的优化需求也日益迫切。ODCG(Optimized Dynamic Clock Gating)和SDCG(Smar...

关键字: RTL 时钟门控 ODCG/SDCG

随着芯片设计复杂度的提升,时钟网络功耗已成为系统级功耗的重要组成部分。时钟门控技术通过动态关闭空闲模块的时钟信号,可显著降低动态功耗。然而,传统时钟门控优化方法面临两大挑战:一是如何精准识别时钟信号的可控性,二是如何在R...

关键字: 英诺达ERPE RTL

是德科技(NYSE: KEYS )宣布推出 AI Insight Brokers, 扩展其是德科技Vision网络数据包代理(NPBs)方案。这些增强型NPB旨在提高AI驱动的网络安全操作的性能,例如威胁检测、事件响应和...

关键字: AI 数据包 数据库

本文将演示一种加速嵌入式系统设计原型阶段的方法,说明如何将与硬件无关的驱动程序和传感器结合使用,简化整个嵌入式系统的器件选择。同时还将介绍嵌入式系统的器件、典型软件结构以及驱动程序的实现。后续文章“利用与硬件无关的方法简...

关键字: 嵌入式系统 驱动程序 传感器

上海2025年2月18日 /美通社/ -- 新品亮点 A1轴相比上一代轴速度提升约30% 占地面积相比上一代节省28%,并支持全方位安装 底座提供尾部和底部两种出线方式 提供标准版型号,标准版满足I...

关键字: 汽车电子 ESD RTL 电子零部件

随着科技的飞速发展,嵌入式系统已经成为现代生活不可或缺的一部分,它们被广泛应用于从智能家居到自动驾驶汽车的各个领域。而在这些系统中,C语言由于其高效性、可移植性和对硬件的直接控制能力,成为了嵌入式系统开发的首选语言。

关键字: C语言 驱动程序

在当今快速发展的硬件设计领域,现场可编程门阵列(FPGA)以其高度的灵活性和可定制性,成为了众多应用领域的首选。然而,随着设计复杂性的不断增加,传统的寄存器传输级(RTL)设计方法逐渐暴露出设计周期长、资源消耗大等问题。...

关键字: RTL HLS FPGA

每个嵌入式软件应用程序都必须在某个时候访问最低级别的固件并控制硬件。驱动程序的设计和实现对于确保系统能够满足其实时要求至关重要。

关键字: 嵌入式 驱动程序
关闭