【摘要】網絡互聯(lián)已深入多個領域,而RTEMS實時操作系統(tǒng)對網絡設備的支持卻明顯不足。為添加RTEMS對網絡的支持,充分利用RTEMS的性能。首先對RTEMS網絡設備驅動的運行機理進行了分析,介紹了網絡設備驅動開發(fā)的框架。然后在RTEMS平臺中實現(xiàn)DM9000A網絡接口卡驅動,結合網絡驅動的實例重點分析了RTEMS系統(tǒng)下網路驅動程序的開發(fā)方法。最后使得DM9000A在RTEMS平臺下能夠正常編譯,且通過實驗來驗證實現(xiàn)的可行性和有效性。
【關鍵詞】RTEMS;實時系統(tǒng);DM9000A網絡接口卡;網絡驅動
1.引言
RTEMS(Real-Time Executive for Multiprocessor Systems)是一個開放源代碼的實時嵌入式操作系統(tǒng),對各類主流的嵌入式平臺都有良好的支持[1]。為了添加RTEMS平臺的網絡應用功能,需要設計出合理的網絡設備驅動程序。為了滿足RTEMS平臺的驅動模型,必須對其組織組織框架有所理解。由于RTEMS是開源的,這使得可以對其網絡驅動模塊部分進行分析和移植以滿足不同的應用需求。本文通過對RTEMS網絡源碼的分析,并結合DM9000A驅動的實例,探討了如何為RTEMS添加網絡驅動。
2.RTEMS的網絡模塊
RTEMS網絡棧基于BSD,并提供了絕大部分BSD的網絡服務。網絡應用程序通過套接字(socket)接口來實現(xiàn)本地及網絡設備間的通信。應用程序通過網絡模塊與底層驅動進行交互,是無法直接訪問網絡設備的。
2.1 網絡驅動運行機理
不同于RTEMS平臺的其他設備驅動,網絡設備驅動不是交由IO管理器管理的,而是由BSD協(xié)議棧實現(xiàn)管理的。如圖1所示,由上之下,RTEMS網絡棧分為網絡協(xié)議接口層、網絡設備接口層、設備驅動接口層,以及網絡設備驅動層。
圖1 RTEMS網絡驅動框架
網絡設備驅動層提供訪問物理設備的具體驅動程序。設備驅動接口層,向上為上層提供訪問設備的接口,向下提供統(tǒng)一的驅動程序調用接口,通過if_start函數接口啟動發(fā)送,通過設備的中斷來觸發(fā)具體的收、發(fā)操作。網絡設備接口層是設備驅動接口層的延續(xù),其向協(xié)議接口層提供對硬件設備的統(tǒng)一描述,即每個網絡設備都必須有屬于自己的ifnet結構體,該結構也展示了RTEMS面向對象方法的設計,是設備驅動層中各個函數的容器。網絡協(xié)議接口層為上層協(xié)議提供了統(tǒng)一的接收、發(fā)送數據包的接口,其實質是通過數據包中的協(xié)議頭來決定不同協(xié)議函數的調用。這一層屏蔽了底層的具體硬件細節(jié)。
首先,它會阻塞并等待接收事件START_RECEIVE_EVENT的發(fā)生;然后,當等待的事件發(fā)生時,會向系統(tǒng)申請數據緩存mbuf,獲取數據包長度及狀態(tài)碼,檢查設備是否已經接受到數據、狀態(tài)碼是否正確,調用dm9000a_inblk_16bit()將DM9000A內部SRAM中的數據復制到剛剛申請的緩存mbuf中;最后,剔除以太網頭,并調用ether_input()向internet層傳遞數據進行進一步的處理。
2.2 網絡設備驅動的主要功能
如圖2所示,網絡接收、發(fā)送是通過任務形式存在。發(fā)送任務Trans Daemon會一直阻塞直到有要發(fā)送的數據已經填充發(fā)送隊列。應用準備好要發(fā)送的數據時,發(fā)送任務可能依舊阻塞,當發(fā)送中斷處理程序Transmit ISR空閑時,會觸發(fā)發(fā)送事件來調用網絡驅動程序的發(fā)送函數進行數據發(fā)送。同樣的接收任務Receive Daemon會一直阻塞,當有網絡數據到來時會發(fā)生接收中斷,Receive ISR會觸發(fā)數據接收事件,接著會調用網絡驅動程序的接收函數來接收數據,并交由網絡核心進行進一步的處理,可能涉及TCP的重傳等。之后會提交給上層應用程序。
網絡設備驅動程序的接收、發(fā)送任務極度依賴具體的硬件細節(jié),是驅動設計中的關鍵內容,這部分處理的好壞直接影響了整個網絡的性能。
圖2 RTEMS網絡模型
3.基于ARM的DM9000A網絡驅動設計
3.1 DM9000A網卡硬件接口
實例中,網絡接口卡選擇的是DM9000A芯片。DM9000A是一個高集成而且功耗很低的高速網絡控制器,支持10/100M以太網連接,芯片內部自帶16K字節(jié)的SRAM(3K用來發(fā)送,13K用來接收)。針對不同的處理器,接口支持8位、16位[2]。本文采用三星S3C2440 ARM作為系統(tǒng)的微處理器。S3C2440與DM9000A的連接方式如圖3所示。
S3C2440通過片選nLAN_cs線和LADDR2分別連接DM9000A芯片的nCS管腳和CMD管腳,S3C2440的LnOE線連接DM9000A的nIOR管腳,LnWE線連接DM9000A的nIOW管腳,通過S3C2440的LDATA0到LDATA15數據線和DM9000A的SD0到SD15數據線相連。而DM9000A的中斷管腳和S3C2440的IRQ_LAN相連。
圖3 DM9000A和S3C2440的連接
圖4 netdemo應用輸出
3.2 DM9000A網絡驅動設計
網絡設備驅動程序的設計需要完成的主要有網絡設備初始化、接收任務實現(xiàn)、發(fā)送任務實現(xiàn)、中斷服務程序實現(xiàn)。
3.2.1 網絡設備初始化
任何設備在可使用前都必須進行恰當的初始化。該過程是通過每設備結構體ifnet中if_init函數實現(xiàn)。在向RTEMS注冊網絡設備驅動時被設定為dm9000_init(),當開啟網絡功能支持時rtems_dm9000a_driver_attach會調用dm9000a_init()函數完成設備的初始化。
為完成設備初始化,dm9000a_init()會調用dm9000a_initialize_hardware完成具體的初始化,其中包括軟復位,探測設備類型、是否掛接,數據位模式,使能接收、發(fā)送中斷。
3.2.2 接收任務實現(xiàn)
由1.2節(jié)可知,RTEMS中是以任務形式監(jiān)聽是否要進行數據的接收,當網卡接收到數據時,中斷會發(fā)送接收事件以喚醒接收任務進行任務接收。這里,就以dm9000a_rxDaemon()函數來說明如何實現(xiàn)自己的接收任務。
3.2.3 發(fā)送任務實現(xiàn)
同接收任務一樣,發(fā)送任務dm9000a_txDaemon()會一直阻塞并等待中斷觸發(fā)發(fā)送事件START_TRANSMIT_EVENT;然后檢測發(fā)送隊列是否為空,不為空即調用驅動的發(fā)送函數dm9000a_sendpacket()完成具體的數據包發(fā)送,直到發(fā)送隊列為空。
dm9000a_sendpacket()函數完成以下幾個步驟:首先,將應用程序放在mbuf中的數據拷貝到發(fā)送緩沖txbuf數組中;然后,再將txbuf中的數據拷貝到DM9000A內部的SRAM中等待發(fā)送,通過寫DM9000A_TCR寄存器開始硬件的發(fā)送;最后,清零DM9000A_ISR寄存器的TX位。
3.2.4 中斷服務程序實現(xiàn)
數據包的接收和發(fā)送都會觸發(fā)硬件中斷,通知驅動程序進行數據包的接收和發(fā)送。中斷程序dm9000a_isr()是驅動的核心,由其控制網卡的接收、發(fā)送動作。
在dm9000a_isr()中,首先,屏蔽中斷,獲得中斷狀態(tài)碼;然后,根據DM9000A_ISR寄存器中接收和發(fā)送中斷位來觸發(fā)相應的START_RECEIVE_EVENT和START_TRANSMIT_EVENT事件;最后,重新使能中斷。
4.DM9000A驅動的編譯及測試
4.1 將驅動程序編譯進RTEMS
網絡驅動被視為BSD網絡棧的一部分[3],由于網絡是RTEMS的可選支持功能,為添加網絡功能首先要使得RTEMS支持TCP/IP協(xié)議棧,而后才能添加定制的網絡驅動程序。
為RTEMS添加網絡功能是通過BSP目錄下的Makefile.am文件實現(xiàn)的。這樣應用程序就可以使用RTEMS提供的網絡功能了。
4.2 測試結果
使用RTEMS自帶的測試樣例netdemo進行網絡測試,netdemo主要顯示網絡連接參數,比如當前udp、tcp請求,已發(fā)生中斷次數等。
不同于Linux嵌入式系統(tǒng),RTEMS的應用程序必須和RTEMS編譯成一個鏡像,然后加載進內存才能執(zhí)行。在編譯鏡像前需要為netdemo應用程序配置網絡參數,在network_config文件中添加IP地址,網關,應用可使用的mbuf緩存大小等。如圖4所示,網絡驅動已經正常運行。
5.結束語
本設計以DM9000A網絡芯片作為樣例,介紹了網絡設備驅動的運行機制,詳細分析了實現(xiàn)RTEMS平臺下網絡設備驅動程序的方法和步驟。RTEMS網絡設備驅動程序的設計不同于其他的設備驅動程序,其并不由IO管理器進行管理,但也具有自身的規(guī)律,遵循這個規(guī)律,可以設計出符合應用需求的驅動程序。分析了RTEMS中的網絡驅動程序的工作機制,同時結合樣例,詳盡闡述了如何設計網絡驅動程序以使之滿足特定的應用要求。通過對DM9000A網絡設備驅動程序的研究,對于RTEMS平臺下添加其他類似的網絡設備具有一定的借鑒參考價值。
參考文獻
[1]RTEMS Steering Committee.RTEMS Home Page[J]. 2010.
[2]DM9000A-17-DS-F01 Data Sheet[S].Davicom Semiconductor Inc,2006.
[3]RTEMS TCP/IP Networking Supplement Guide[J].On-Line Applications Research Corporation(OAR),2013.
作者簡介:
吳華中(1989—),男,中北大學儀器與電子學院碩士研究生在讀,研究方向:自動化測試與控制技術。
陳鴻(1963—),男,博士,中北大學儀器與電子學院教授,碩士生導師,研究方向:動態(tài)測試。