• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      lwIP在μTenux實時操作系統(tǒng)上的移植※

      2014-08-27 08:34:10王磊吳海洋
      關鍵詞:信號量網絡接口緩沖區(qū)

      王磊,吳海洋

      (大連交通大學電氣信息學院,大連116028)

      引 言

      隨著物聯(lián)網技術的發(fā)展,普適計算理念[1]的深化和大數據處理能力的增強,更多數據將通過網絡進行集中化、智能化處理。在此背景下,對小型嵌入式設備提出了具有網絡通信能力的更高要求[2]。通過在實時操作系統(tǒng)上移植網絡協(xié)議棧lwIP[3],將為此類設備的研發(fā)提供具有網絡功能的操作系統(tǒng)支持。

      lwIP是一款優(yōu)秀的輕量級嵌入式網絡組件,為各領域眾多嵌入式設備提供了小容量低成本的TCP/IP 網絡協(xié)議棧。當前眾多知名半導體芯片廠商提供的軟件開發(fā)包中,都毫無例外地選用lwIP為網絡支持組件[4]。但是,不同芯片廠商的軟件開發(fā)包基于不同的操作系統(tǒng),需要切換不同的嵌入式開發(fā)環(huán)境,給開發(fā)人員學習和使用帶來了額外工作量[5],延長了開發(fā)周期。μTenux作為開源免費的實時操作系統(tǒng),支持ST、ATMEL、NXP、Freescale、TI等多家芯片廠商ARM Cortex-M 構架的主流芯片,應用該操作系統(tǒng)進行產品研發(fā)可縮短開發(fā)周期,降低商業(yè)成本[6]。

      1 lwIP協(xié)議棧

      lwIP(lightweight IP)是瑞士計算機科學院的Adam Dunkels設計編寫而后全世界開源貢獻者共同升級維護的開源代碼。該組件沒有嚴格地遵循TCP/IP 協(xié)議的分層思想,采用各個協(xié)議層交叉存取和內存共享的構架方式,是一個以占用盡量小的資源代價實現(xiàn)TCP/IP協(xié)議棧的輕量型中間件。

      lwIP的主要特點如下[7]:

      ①實現(xiàn)了包括IP、ICMP、UDP、TCP、IGMP、ARP、PPPoS、PPPoE在內的諸多網絡協(xié)議;

      ②協(xié)議棧支持DHCP客戶端,DNS客戶端,AutoIP/APIPA(零配置網絡)和SNMP代理(私有的MIB支持);

      ③擁有增強功能的獨有API接口和可選的Berkeley風格的Socket API接口;

      ④支持多網絡接口、TCP擁塞控制、延時估計和快速恢復、快速重傳機制;

      ⑤包含HTTP 服務器、SNTP 客戶端、SMTP 客戶端、ping、NetBIOS域名解析器等應用示例。

      從上述特點可以看出,lwIP 是一個功能全面的協(xié)議棧。同時,因為lwIP僅僅占用RAM 空間幾十KB,ROM空間40KB左右,所以該組件成為ARM 構架32位嵌入式設備中網絡中間件的首選。

      1.3.2 版本的lwIP從代碼的組織結構上可分為4個層次,如圖1所示,其中netif是和底層物理環(huán)境緊密相關的網絡接口驅動部分,該部分主要實現(xiàn)網絡控制器初始化和數據包收發(fā)的功能。arch是lwIP 為移植設計的操作系統(tǒng)模擬層,移植時需要創(chuàng)建sys_arch.c文件,并在該文件中實現(xiàn)多任務,任務間消息傳遞的郵箱和信號量,同步以及超時保護等機制。core和api包含了lwIP核心代碼和應用編程接口代碼,移植時不需要修改。值得指出的是,lwIP 在沒有操作系統(tǒng)的支持下也可以運行,此時不需要arch組件的支持,但是lwIP只能運行在一個線程下,會降低性能。

      圖1 lwIP組件結構圖

      2 μTenux實時操作系統(tǒng)

      μTenux是由T-Engine中國開源社區(qū)研發(fā)推出的適用于32位ARM Cortex-M 系列內核的嵌入式多任務硬實時操作系統(tǒng)。該操作系統(tǒng)采用可移植、可裁剪、任務可剝奪的μT-Kernel作為系統(tǒng)內核規(guī)范,允許開發(fā)人員在小規(guī)模嵌入式系統(tǒng)上進行優(yōu)化和裁剪。圖2 給出了μTenux操作系統(tǒng)構架,其中內核μT/Kernel由三部分(μT/OS、μT/SM、μT/DS)構成[8],分別為操作系統(tǒng)內核、管理內核和調試內核。底層包含完整的驅動庫和標準C 庫文件,中間件和上層接口采用主流的第三方組件[6]。本文是μTenux中μT/Subass 研發(fā)的一部分,開源代碼會隨μTenux軟件包一起在T-Engine中國開源社區(qū)公布并不斷完善升級。

      圖2 μTenux操作系統(tǒng)構架

      3 移植過程

      lwIP基于操作系統(tǒng)的移植主要分為三個方面[9]:①根據基于的CPU 構架不同,需要定義和硬件相關的數據類型與結構以及調試、測量等函數實現(xiàn)方法;②實現(xiàn)操作系統(tǒng)模擬層的多任務、郵箱、信號量、同步、時間超限等函數;③根據使用的網絡控制器芯片不同,以及和主控芯片通信的協(xié)議不同,需要對底層以太網驅動進行移植。結合μTenux操作系統(tǒng)中的對象特點,本部分對lwIP移植過程中的幾個要點進行分析。

      3.1 lwIP郵箱函數的移植

      當產生一次數據包處理時,lwIP 中各個協(xié)議層之間通過維護同一個數據空間來減少數據包復制帶來的RAM損耗和時間損耗,該數據包所占空間的起始地址在各個協(xié)議層之間通過郵箱機制進行傳遞。

      lwIP的郵箱機制需要實現(xiàn)郵箱的創(chuàng)建、刪除、發(fā)送(堵塞函數,直到發(fā)送成功)、嘗試發(fā)送(發(fā)送后立即返回狀態(tài))、接收(帶有定時參數,有時間限制)、嘗試接收(接收后立即返回狀態(tài))等6 個函數。按照lwIP 的移植要求,在sys_arch.c中要實現(xiàn)以上函數。μTenux本身的郵箱機制對消息結構有特殊規(guī)定,本文采用消息緩沖區(qū)機制實現(xiàn)lwIP 的郵箱函數封裝。μTenux和其他操作系統(tǒng)功能上的區(qū)別可以從消息緩沖區(qū)的實現(xiàn)機制上得以體現(xiàn)。μTenux提供的相關函數有:建立和刪除消息緩沖區(qū),發(fā)送和接收消息以及查詢消息緩沖區(qū)的狀態(tài)。

      圖3是μTenux緩沖區(qū)機制消息傳遞過程的示意圖,每個消息緩沖區(qū)都包含一個等待發(fā)送消息的任務隊列和一個等待接收消息的任務隊列[9]。圖中,以兩個任務隊列各有一個任務為例,發(fā)送任務和接收任務通過動作①和②實現(xiàn)消息的傳遞。每當創(chuàng)建一個新的消息緩沖區(qū)時會產生一個連續(xù)的空間,內核通過MBFCB(消息緩沖區(qū)控制塊)進行管理,實現(xiàn)緩沖區(qū)的環(huán)狀消息結構。在創(chuàng)建、使用和釋放消息緩沖區(qū)的過程中,μT/Kernel內核始終對內存進行著最優(yōu)的管理,這個過程中不會產生內存空間碎片。消息緩沖區(qū)機制可用來傳遞大小可變的消息,因為要用此機制實現(xiàn)lwIP的郵箱函數,所以封裝時對lwIP的消息取地址,將地址作為μTenux緩沖區(qū)的內容傳遞。

      以郵箱的創(chuàng)建為例,可以直接對tk_cre_mbf函數進行封裝,其中maxmsz(最大消息長度)的參數為sizeof(void*),是因為郵箱傳遞的參數是數據指針,所以這里最大消息長度規(guī)定不會超過這個長度。代碼略——編者注。

      圖3 μTenux的消息緩沖區(qū)機制

      lwIP郵箱的其他實現(xiàn)函數也是對消息緩沖區(qū)相關函數的封裝,需要注意兩點,μTenux的消息緩沖區(qū)函數中與時限有關的參數和lwIP中給出的定義不同;使用μTenux消息緩沖區(qū)機制傳遞的是lwIP郵箱消息的二重指針。

      3.2 lwIP信號量函數的移植

      lwIP的信號量機制需要實現(xiàn)信號量的創(chuàng)建、刪除、占用、等待等4個函數。信號量機制在操作系統(tǒng)中很常見,它一般用來指示可用資源,并將可用資源以數值的形式表示出來,多任務系統(tǒng)可以通過信號量實現(xiàn)任務間的同步和互斥控制。μTenux的信號量機制中包含一個資源計數器和一個等待信號量的任務隊列。一個任務可以發(fā)出事件通知,釋放返回m 個資源,此時,信號量資源計數加m。相反,當該任務正在等待事件獲得n個資源時,信號量資源計數器將減n。如果信號量資源的數量不夠,信號量計數器可以變成負值,則嘗試獲取資源的任務進入等待狀態(tài),直至下次有資源釋放返回。等待信號量資源的任務會被置入信號量任務隊列中。μTenux為防止過多資源同時返回到信號量,在信號量中設置一個最大信號量計數器,當返回到信號量的資源造成最大計數的超出時報錯[8]。lwIP的信號量實現(xiàn)可以直接使用μTenux的信號量機制。以信號量的創(chuàng)建為例,可以直接對tk_cre_sem 函數進行封裝,其中maxsem 由用戶在sys_arch.h中設定,配置成CFN_MAX_SEMID(μTenux 信號量的配置值),使μTenux 中的資源配置直接用于lwIP。代碼略——編者注。

      lwIP信號量的其他實現(xiàn)函數也是對相關函數的封裝,和郵箱機制的實現(xiàn)方法一樣,要考慮時限的對應關系。

      3.3 lwIP網絡控制器驅動函數的移植

      3.3.1 lwIP協(xié)議棧數據包結構

      在lwIP中,每次數據包處理時占用的數據空間采用pbuf結構。該結構同BSD中的mbuf結構類似,是網絡控制器驅動程序實現(xiàn)的核心[9]。

      lwIP的實現(xiàn)同樣基于TCP/IP 協(xié)議的分層思想,在lwIP的core組件中包含單獨命名的模塊,例如udp.c、tcp.c、dhcp.c等,它們彼此共享一個共同的數據空間,各個層次之間傳遞的是數據地址而不是數據本身,這個數據采用的是上文提到的pbuf結構,如圖4所示。pbuf結構根據數據所在的內存區(qū)域和申請方式不同,有4種不同的類型,本文以典型的PBUF_RAM 類型為例,通過圖4分析pbuf的結構定義。

      圖4 pbuf結構

      pbuf結構中有7個參數,通過next指針組成pbuf鏈表。一個數據包往往包含多個pbuf結構的數據,lwIP在運行中涉及消息的接收、發(fā)送、傳遞、丟棄等操作,要通過這幾個參數中的長度和標志位來識別判斷。這種實現(xiàn)機制為lwIP協(xié)議棧節(jié)省了內存空間和處理時間,卻為以太網驅動的實現(xiàn)增加了復雜度。

      3.3.2 網絡接口函數的實現(xiàn)

      該部分與底層硬件聯(lián)系緊密,需實現(xiàn)5個基本函數:網絡接口初始化函數、網絡接口接收函數、底層網絡控制器初始化函數、底層網絡控制器接收數據包函數、底層網絡控制器發(fā)送數據包函數。

      本文以Microchip公司生產的基于SPI接口的以太網控制器芯片ENC28J60[11]為例,其基本操作驅動庫代碼采用美國SourceForge.net平臺AVRNET[12]開源項目中的代碼(enc28j60.c)。lwIP 底層網絡接口文件取名enc28j60if.c,需實現(xiàn)上面提到的5個函數。其中,底層網絡控制器接收數據包函數和底層網絡控制器發(fā)送數據包函數由于考慮到lwIP 的pbuf結構,所以不能直接使用enc28j60.c中的數據包收發(fā)函數,這部分需要進行改寫。以底層網絡控制器接收數據包函數為例,具體實現(xiàn)分為4步:①判斷enc28j60中是否有數據接收;②配置接收緩沖區(qū)大小;③判斷數據合法性并申請pbuf結構;④接收數據到pbuf結構中。代碼略——編者注。

      ENC28J60接收的數據包由4部分組成(下一個數據包的指針、接收的狀態(tài)向量、接收的有效數據、CRC 校驗)。底層網絡控制器發(fā)送數據包函數用到的也是這樣的思想。此外,網絡接口初始化函數和網絡接口接收函數直接使用lwIP提供的模版函數,底層網絡控制器初始化函數配置lwIP的netif接口后調用enc28j60.c中的初始化函數即可。

      4 lwIP移植的簡單測試用例

      以STM32F407VG[13]和ENC28J60 為例,在μTenux軟件包中,已經對STM32F407VG 的時鐘和串口進行了初始化設置,添加SPI接口初始化函數即可進行l(wèi)wIP的移植測試。本部分先介紹lwIP的應用編程接口,然后給出測試實例和結果。

      4.1 lwIP的API接口說明

      lwIP為用戶編寫上層應用代碼提供了三種不同的API接口,分別是原始API接口、高性能專用的sequential API接口和Berkeley風格的Socket API接口。當不提供操作系統(tǒng)支持的時候只能使用原始API接口,當提供操作系支持時,三種接口方式都可以使用。

      基于前文,當完成了lwIP基于μTenux 的操作系 統(tǒng) 模 擬 層 移 植 和ENC28J60 的以太網網絡接口的函數封裝,建立了如圖5所示的依賴關系,這時就可以進行程序編寫和測試了。

      圖5 lwIP依賴關系

      4.2 一個簡單的HTTP服務器實現(xiàn)

      為了檢驗移植后的lwIP是否能夠正常運行,使用lwIP的sequential API寫一個簡單的HTTP服務器程序[14]。

      程序中,將html語言的字符串存儲在一個靜態(tài)變量htmltestdata中,在主函數中創(chuàng)建一個名為http_task的進程函數,在該進程函數中完成以下幾步:①初始化lwIP協(xié)議棧,注冊網絡接口;②允許STM32F407VG 接收SPI外部中斷,使ENC28J60接收到數據之后可以馬上處理;③新建一個TCP鏈接,并監(jiān)聽端口號80;④當監(jiān)聽到客戶端連接后處理客戶端接收到的數據。完成上述4步之后,當發(fā)現(xiàn)客戶端請求的數據并且能正確解析時,則將htmltestdata返回,這樣就實現(xiàn)了一個簡單的HTTP服務器。

      建立TCP連接部分代碼略——編者注。

      編譯成功并運行后,通過在Windows控制臺上執(zhí)行ping命令,并且打開瀏覽器在地址欄中輸入網絡接口初始化時綁定的IP地址,圖6和圖7的測試結果表明ARP、ICMP、IP和TCP協(xié)議運行正常。

      圖6 ping命令測試

      結 語

      lwIP是一款優(yōu)秀的免費開源的TCP/IP網絡中間件,基于μTenux的lwIP移植結合了操作系統(tǒng)的優(yōu)勢,可以用于嵌入式設備的產品研發(fā)上。本文下一步研究工作考慮結合μTenux實時系統(tǒng)的消息郵箱和內存管理特性,以改進lwIP中pbuf結構的內存申請方式,縮減移植后的lwIP代碼量,降低運行時ROM 和RAM 占用量,進一步優(yōu)化lwIP的實時性和穩(wěn)定性。

      圖7 HTTP應用示例

      編者注:本文為期刊縮略版,全文見本刊網站www.mesnet.com.cn。

      [1]Wikipedia.Ubiquitous computing[OL].[2013-08].http://en.wikipedia.org/wiki/Ubiquitous_computing.

      [2]張園園.高性能嵌入式系統(tǒng)網絡協(xié)議棧關鍵技術研究與實踐[D].北京:北京郵電大學,2010.

      [3]Dunkels A.Design and Implementation of the LwIP TCP/IP Stack[D].Stockholm:Swedish Institute of Computer Science,2001.

      [4]李志明.STM32 嵌入式系統(tǒng)開發(fā)實戰(zhàn)指南:FreeRTOS 與LwIP聯(lián)合移植[M].北京:機械工業(yè)出版社,2013.

      [5]Scaglia S.嵌入式Internet TCP/IP基礎、實現(xiàn)及應用[M].潘琢金,等譯.北京:北京航空航天大學出版社,2008.

      [6]T-Engine中國開源社區(qū).μTenux嵌入式操作系統(tǒng)——μT/Kernel內核規(guī)范[OL].[2013-08].http://www.tecoss.org.

      [7]Savannah.lwIP-A Lightweight TCP/IP stack,2013.

      [8]坂村健.嵌入式實時操作系統(tǒng)T-Kernel2.0[M].梁青,譯.北京:北京航空航天大學出版社,2012.

      [9]朱升林.嵌入式網絡那些事:LwIP 協(xié)議深度剖析與實戰(zhàn)演練[M].北京:中國水利水電出版社,2012.

      [10]邱書波,陳偉.基于ARM 的輕量級TCP/IP協(xié)議棧的研究及移植[J].計算機應用與軟件,2009,26(8):90-92.

      [11]Microchip.ENC28J60,2013.

      [12]Source Forge.AVRnet,2013.

      [13]ST.STM32F407VG,2013.

      [14]Christian L.嵌入式協(xié)議棧μCTCP-IP——基于STM32微控制器[M].鄺堅,譯.北京:北京航空航天大學出版社,2013.

      猜你喜歡
      信號量網絡接口緩沖區(qū)
      嵌入式系統(tǒng)環(huán)形緩沖區(qū)快速讀寫方法的設計與實現(xiàn)
      基于STM32的mbedOS信號量調度機制剖析
      變電站網絡接口物理防護系統(tǒng)設計與實現(xiàn)
      Nucleus PLUS操作系統(tǒng)信號量機制的研究與測試
      測控技術(2018年8期)2018-11-25 07:42:12
      淺析CTC與GSM-R系統(tǒng)網絡接口及路由配置改進措施
      關鍵鏈技術緩沖區(qū)的確定方法研究
      網絡設置管理
      京滬高鐵GSM-R網絡接口監(jiān)測網關子系統(tǒng)的設計與實現(xiàn)
      μC/OS- -III對信號量的改進
      Linux操作系統(tǒng)信號量機制的實時化改造
      克山县| 竹溪县| 台南市| 安溪县| 青神县| 南丹县| 台南市| 宜宾市| 瑞金市| 霍邱县| 兴城市| 沾化县| 黎城县| 大新县| 虹口区| 库车县| 宁晋县| 周宁县| 马公市| 东港市| 阿城市| 张家港市| 马龙县| 麻阳| 昌吉市| 韩城市| 旺苍县| 桦南县| 景谷| 资溪县| 开阳县| 炎陵县| 龙州县| 栾城县| 潍坊市| 恩平市| 宜兰市| 荥经县| 永善县| 普安县| 内江市|