張青青
摘要:LwIP 是一個占用內(nèi)存比較小的開源 TCP/IP 的協(xié)議棧,在嵌入式的平臺上如果需要網(wǎng)絡(luò)通信則會廣泛的應(yīng)用這個協(xié)議棧。但是由于在網(wǎng)絡(luò)中協(xié)議棧和通信比較復(fù)雜,想要直接調(diào)試程序在嵌入式平臺上,會非常的麻煩,浪費精力。根據(jù)這個思路,依據(jù)VisualC++開發(fā)環(huán)境,我們研究開發(fā)了一套該協(xié)議棧的開發(fā)平臺是直接運行在pc的系統(tǒng)上的。
關(guān)鍵詞:嵌入式系統(tǒng) LwIP協(xié)議棧 網(wǎng)絡(luò)驅(qū)動
中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1007-9416(2016)08-0191-01
設(shè)計了一套基于Windows操作系統(tǒng)的LwIP網(wǎng)絡(luò)應(yīng)用開發(fā)平臺系統(tǒng)。用戶可以更方便的開發(fā)和調(diào)試基于LwIP協(xié)議棧的網(wǎng)絡(luò)程序。
1 系統(tǒng)整體設(shè)計
系統(tǒng)包含的四個模塊如下:(1)網(wǎng)絡(luò)應(yīng)用模塊:提供可視化的參數(shù)配置和數(shù)據(jù)統(tǒng)計。(2)LwIP協(xié)議棧模塊:實現(xiàn)網(wǎng)絡(luò)通信的核心模塊。(3)網(wǎng)絡(luò)驅(qū)動模塊:與操作系統(tǒng)驅(qū)動適配,實現(xiàn)硬件級別的數(shù)據(jù)收發(fā)控制在圖1中所示,居于中間的模塊為LwIP 協(xié)議棧,是這個軟件的核心部位,它通過與windows的系統(tǒng)接口連接,實現(xiàn)該軟件在windows系統(tǒng)上的運行;在核心模塊之上,是實現(xiàn)了基本的數(shù)據(jù)發(fā)送和接收的網(wǎng)絡(luò)應(yīng)用模塊;置于最底層的模塊是負責(zé)讓協(xié)議棧與windows網(wǎng)絡(luò)驅(qū)動互相適配的數(shù)據(jù)驅(qū)動模塊,主要功能是通過windows設(shè)備驅(qū)動將該LwIP協(xié)議棧構(gòu)造的報文發(fā)送到網(wǎng)絡(luò),并將WINDOWS設(shè)備驅(qū)動收到的報文遞交給LwIP協(xié)議棧處理。
2 網(wǎng)絡(luò)應(yīng)用子模塊
網(wǎng)絡(luò)應(yīng)用模塊的設(shè)計目標(biāo)是,基于LwIP協(xié)議棧提供的三種調(diào)用模式,提供了可視化的網(wǎng)絡(luò)應(yīng)用配置和操作界面。通過應(yīng)用子模塊,用戶可以直觀的配置并查看網(wǎng)絡(luò)程序的運行狀況;通過查看源代碼,用戶也可以獲得直接的可參考的LwIP網(wǎng)絡(luò)程序代碼示例。
主界面使用 MFC 開發(fā),包含參數(shù)配置區(qū)和數(shù)據(jù)統(tǒng)計區(qū)。參數(shù)配置區(qū)提供了實現(xiàn)網(wǎng)絡(luò)通信需要的參數(shù)選項;數(shù)據(jù)統(tǒng)計區(qū)則提供數(shù)據(jù)傳輸統(tǒng)計,方便進行傳輸性能測試與對比。
3 LwIP協(xié)議棧子模塊
這個系統(tǒng)軟件是搭建在windows平臺上的,這個軟件的核心部分就是LwIP協(xié)議棧。所以最重要的自然就是如何將該協(xié)議棧移植于windows操作系統(tǒng)中。因為嵌入式系統(tǒng)操作系統(tǒng)和windows操作系統(tǒng)是由很大的不同的,所以在移植中,如果想要確保移植后的lwip順利運行并且執(zhí)行命令,必須注意以下關(guān)鍵點:(1)內(nèi)存:因為我們最終目的是將在windows平臺上調(diào)試好的lwip網(wǎng)絡(luò)應(yīng)用移植到嵌入式系統(tǒng)中去運動,但是由于windows操作系統(tǒng)和嵌入式系統(tǒng)的內(nèi)存配置是不同的,所以如果不考慮內(nèi)存限制,則會在后面的嵌入式調(diào)試中出現(xiàn)各種問題,所以在windows平臺下的需要為內(nèi)存調(diào)試預(yù)留一定條件,必須對lwip內(nèi)存的相關(guān)接口和參數(shù)配置進行強調(diào)和注意。(2)線程:進程和線程在windows系統(tǒng)中存在,所以我們要考慮該協(xié)議棧在這種多線程運行下的共享變量問題,需要將windows的線程lwip的工作線程來適配的。對于如何記錄和管理線程的參數(shù)需要專門來定義線程結(jié)構(gòu)。(3)通知與保護:因為該協(xié)議棧支持多線程,所以我們必然要考慮線程之間的通信和全局變量的訪問保護。而lwip提供了信號量,郵箱和臨界區(qū)這三種不同的通知和保護機制。
4 網(wǎng)絡(luò)驅(qū)動子模塊
4.1 通信模塊技術(shù)方案
主要內(nèi)容:這個網(wǎng)絡(luò)應(yīng)用的開發(fā)最關(guān)鍵的部分就是如何讓lwip協(xié)議棧網(wǎng)絡(luò)通信,即解決如何接受和發(fā)送報文的這個問題。
該開發(fā)平臺在網(wǎng)絡(luò)應(yīng)用子模塊和lwip協(xié)議棧子模塊完成之后,就表示我們已經(jīng)實現(xiàn)了該協(xié)議和上層應(yīng)用構(gòu)造ip或以太網(wǎng)報文的功能。這個平臺的核心是網(wǎng)絡(luò)程序的測試,所以系統(tǒng)聯(lián)網(wǎng)是必不可少的。主要就是讓該協(xié)議棧構(gòu)造的報文調(diào)動windows的網(wǎng)卡驅(qū)動往網(wǎng)絡(luò)中傳送數(shù)據(jù),反之,windows的網(wǎng)卡驅(qū)動也能將收到的數(shù)據(jù)交付給lwip協(xié)議棧來處理分析。
winpcap是一個免費的代碼可以隨時查看的第三方網(wǎng)絡(luò)操作庫,用它來實現(xiàn)在windows網(wǎng)絡(luò)設(shè)備上的操作是很方便的,因為winpcap基于windows平臺專門有一組接口用于使用,只要能熟練應(yīng)用這些接口,就可以輕松的實現(xiàn)對網(wǎng)絡(luò)數(shù)據(jù)包的捕獲和分析。
WinPcap的層次結(jié)構(gòu)是怎么樣的呢?它主要由三部分構(gòu)成:內(nèi)核級數(shù)據(jù)包過濾器,底層的設(shè)備動態(tài)鏈接庫(packet.dll),對WINDOWS系統(tǒng)的封裝庫(wpcap.dll)。因為winpcap也有兩種難度不同的接口可以編程。一個是功能特別抽象但是龐大的基于libpcap的wpcap.dll,另一個則是功能簡單的較底層的packet.dll。
4.2 通信模塊設(shè)計
首先下載winpcap并且在windows平臺上安裝winpcap驅(qū)動軟件,然后直接讓winpcap操作網(wǎng)絡(luò)適配器,完成收發(fā)數(shù)據(jù)包的作用。
由于本文的目的主要是實現(xiàn)以太網(wǎng)數(shù)據(jù)的收發(fā)。因為該平臺對于winpcap提供的別的網(wǎng)絡(luò)功能沒用什么特別的要求,基于開發(fā)程序的省時省力性考慮,決定使用好用的libpcap接口。
5 結(jié)語
全面的對于網(wǎng)絡(luò)開發(fā)平臺的設(shè)計框架進行了介紹。把各個部分及其主要實現(xiàn)的功能逐個介紹,著重的描述了上層應(yīng)用開發(fā)的特點,及其輕量級協(xié)議棧的移植要點。對于winpcap的使用讓lwip協(xié)議棧和windows驅(qū)動之間的數(shù)據(jù)收發(fā)也做了詳細說明。使得最后搭建了一個完整的調(diào)試環(huán)境。