<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > VxWorks系統(tǒng)下的RTL8139驅(qū)動(dòng)程序改進(jìn)

          VxWorks系統(tǒng)下的RTL8139驅(qū)動(dòng)程序改進(jìn)

          ——
          作者:蔡衛(wèi)平,張怡典 (九江職業(yè)技術(shù)學(xué)院 江西省九江市 332007) 時(shí)間:2007-01-26 來(lái)源:《電子工程師》 收藏

          0 引言

          rtl8139是臺(tái)灣realtek半導(dǎo)體公司生產(chǎn)的一種快速以太網(wǎng)控制器,提供符合pci2.2標(biāo)準(zhǔn)的接口,兼容ieee802.3u 100base-t規(guī)范,支持ieee-802.3x全雙工流量控制,支持10mbit.s-1/100mbit.s-1全雙工、半雙工自適應(yīng),價(jià)格便宜,性能穩(wěn)定,是pc機(jī)、電信終端產(chǎn)品中應(yīng)用最多的以太網(wǎng)控制器之一。rtl8139在各種操作系統(tǒng)下的驅(qū)動(dòng)都能從realtek公司網(wǎng)頁(yè)下載,其中包括vxworks系統(tǒng)下的驅(qū)動(dòng),而且提供c源代碼。但是在嵌入式系統(tǒng)下,針對(duì)不同的硬件平臺(tái),往往需要修改該驅(qū)動(dòng)程序以提高其穩(wěn)定性和效率?;趍pc8241 cpu的硬件平臺(tái),本文提出rtl8139在vxworks系統(tǒng)下驅(qū)動(dòng)程序的改進(jìn)措施。

          1 硬件平臺(tái)簡(jiǎn)介

          圖1所示為某交換機(jī)終端設(shè)備的部分硬件框圖。

          本文引用地址:http://www.ex-cimer.com/article/21292.htm

          cpu采用motorola公司的powerpc系列處理器之一的mpc8241,該芯片除嵌入32位powerpc處理器內(nèi)核外,還集成了mpc107橋,提供pci接口與rtl8139連接,橋上有內(nèi)存控制器,掛16mb sdram和4 mbflash。cpu時(shí)鐘是166mhz,sdram時(shí)鐘是66mhz,pci時(shí)鐘是33mhz,rtl8139工作在10mbit/s,半雙工方式,通過(guò)集線器(hub)連入internet,其作用是轉(zhuǎn)發(fā)由話音信號(hào)打成的數(shù)據(jù)包,要求1200pps(每秒數(shù)據(jù)包),且cpu占用率不高于50%。

          vxworks支持end(增加型網(wǎng)絡(luò)驅(qū)動(dòng))格式的以太網(wǎng)控制器驅(qū)動(dòng),提供mux層作為網(wǎng)絡(luò)協(xié)議和以太網(wǎng)控制器驅(qū)動(dòng)間的接口,mux規(guī)定了驅(qū)動(dòng)的接口函數(shù),rtl8139驅(qū)動(dòng)程序rtl8139end.c是完全按照end格式編寫的代碼,提供了所有mux層規(guī)定的接口函數(shù),只要寫好rtl8139 pci配制空間寄存器,在sysrtl8139end.c中傳入pci空間首地址、中斷向量號(hào)和中斷優(yōu)先級(jí)參數(shù),按照end格式驅(qū)動(dòng)裝載程序,裝載成功后rtl8139就能順利運(yùn)行。

          2 驅(qū)動(dòng)程序中需要解決的問(wèn)題

          如果數(shù)據(jù)包的收發(fā)速率是均勻的,rtl8139完全可以達(dá)到前文提出的要求,但是internet上經(jīng)常有突發(fā)的數(shù)據(jù)包,而rtl8139的接收f(shuō)ifo和發(fā)送fifo都只有2kb,加之rtl8139對(duì)收發(fā)數(shù)據(jù)包采取完全拷貝方式,在數(shù)據(jù)包突發(fā)期間,cpu占用率過(guò)高,來(lái)不及處理過(guò)多的數(shù)據(jù)包,從而造成丟包。在rtl8139end.c中,驅(qū)動(dòng)的數(shù)據(jù)包緩沖和協(xié)議棧的內(nèi)存池是完全分開(kāi)的,數(shù)據(jù)包接收和發(fā)送都有1次拷貝過(guò)程,而高性能以太網(wǎng)控制器一般只在發(fā)送時(shí)需要拷貝1次,這樣每收發(fā)一個(gè)包,cpu需要多拷貝1次,這是導(dǎo)致rtl8139性能不高的重要原因,但這種包處理方式是由硬件決定的,驅(qū)動(dòng)程序不能改變。事實(shí)上,在突發(fā)包很多的情況下,以太網(wǎng)控制器丟包是允許的,但突發(fā)時(shí)間過(guò)后,應(yīng)恢復(fù)正常的收發(fā)包流程。但在前文介紹的硬件平臺(tái)上運(yùn)行rtl8139end.c,在pc機(jī)上用sniffer以連續(xù)方式給rtl8139發(fā)數(shù)據(jù)包,測(cè)試時(shí)間為數(shù)十秒,停止發(fā)包后,在pc機(jī)上用ping命令測(cè)試rtl8139能否正?;匕?,結(jié)果不能ping通,表明rtl8139的收發(fā)包流程因突發(fā)包太多而中斷,且不能恢復(fù)。

          分析rtl8139end.c程序,其發(fā)送數(shù)據(jù)包流程如圖2所示。

          rtl8139有4個(gè)發(fā)送描述符,有各自的發(fā)送狀態(tài)寄存器tsd0~tsd3和發(fā)送起始地址寄存器tsad0~tsad3,每個(gè)發(fā)送描述符可發(fā)送1個(gè)數(shù)據(jù)包。在函數(shù)rtl8139send()中申請(qǐng)1個(gè)發(fā)送數(shù)據(jù)包緩沖區(qū),將協(xié)議棧傳下來(lái)的數(shù)據(jù)包拷貝進(jìn)該緩沖區(qū),然后將該緩沖區(qū)的首地址寫入發(fā)送起始地址寄存器,最后填寫發(fā)送狀態(tài)寄存器,并將其own位置0,表示將該緩沖區(qū)交給rtl8139的發(fā)送dma管理,啟動(dòng)發(fā)送操作。發(fā)送完成后rtl8139產(chǎn)生中斷,進(jìn)人中斷服務(wù)程序rtl8139int(),調(diào)用rtl8139handlesendint(),在該函數(shù)中讀取發(fā)送狀態(tài)寄存器。如果own位為1,則表示發(fā)送dma操作完成,釋放相應(yīng)的發(fā)送緩沖;否則表示發(fā)送dma操作未完成,該發(fā)送緩沖仍由rtl8139硬件所有,下次進(jìn)入發(fā)送中斷再重新查看own位。如此循環(huán)往復(fù),直到own位變?yōu)?,才能釋放相應(yīng)的發(fā)送緩沖,其占用的發(fā)送描述符變?yōu)榭捎谩?/p>

          以上過(guò)程可歸結(jié)為兩點(diǎn):

          a)在rtl8139send()中申請(qǐng)1個(gè)數(shù)據(jù)包緩沖區(qū),占用1個(gè)發(fā)送描述符;

          b)在rtl8139int()中釋放相應(yīng)的數(shù)據(jù)包緩沖區(qū)和發(fā)送描述符。

          從以上分析可以看出,只要發(fā)包的這兩個(gè)環(huán)節(jié)不出問(wèn)題,發(fā)包流程就不會(huì)中斷,另外,在rtl8139handlesendint()中,不是僅僅釋放1個(gè)包緩沖和描述符,而是將所有啟動(dòng)過(guò)發(fā)包操作、發(fā)送狀態(tài)寄存器的own位變?yōu)?的描述符和相應(yīng)包緩沖都釋放掉。這樣可增強(qiáng)程序的穩(wěn)定性,在有突發(fā)包的情況下,cpu可能來(lái)不及響應(yīng)中斷,即造成中斷丟失,但只要還有1個(gè)描述符可用,發(fā)包完成后能進(jìn)中斷,就可以把以前占用的緩沖和描述符全部釋放掉。如果突發(fā)包太多,cpu連續(xù)4個(gè)發(fā)包中斷未響應(yīng),發(fā)送描述符全被占用,下次進(jìn)入rtl8139send()將無(wú)發(fā)送描述符可用,也就不會(huì)再有發(fā)包中斷,rtl8139handlesendint()不會(huì)被調(diào)用,發(fā)送描述符無(wú)法釋放,發(fā)包流程就此中斷,不能恢復(fù),這就是上述rtl8139不能ping通的原因。

          3 解決辦法

          根據(jù)以上分析,只有將被占用的發(fā)送描述符和發(fā)送緩沖釋放,發(fā)包流程才能恢復(fù),這只要調(diào)用一次rtl8139handlesendint()就能實(shí)現(xiàn)。mpc8241片內(nèi)集成有4個(gè)定時(shí)器(timero~timer3),可以使用其中的timero來(lái)產(chǎn)生硬件定時(shí)中斷。在中斷服務(wù)程序中,以rtl8139handlesendint函數(shù)指針作為入口參數(shù)調(diào)用netjobadd(),這樣就可以定時(shí)執(zhí)行rtl8139handlesendint(),及時(shí)釋放被占用的發(fā)送描述符。這需要在rtl8139start()中添加如下代碼:

          電機(jī)保護(hù)器相關(guān)文章:電機(jī)保護(hù)器原理


          關(guān)鍵詞:

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();