嵌入式Linux通信中構件技術應用研究

考慮到TCP 協議是面向連接的、端對端的可靠通信協議,為保證遠程客戶端與本地嵌入式系統服務器的正確通信,采取了相應機制來保證它的可靠性和實時性,即連接的建立與關閉、超時重傳機制、數據包確認機制、流量控制等。因此,將TCP 協議按應用功能劃分成客戶端模塊和服務器端模塊,前者主動建立連接,后者*連接,連接建立后雙方進行數據信息的發送或接收。
相對于TCP 協議,ARP、IP、ICMP、UDP 等協議功能較簡單,對它們不劃分模塊,每個協議按其完成的功能設計成一個構件,但考慮到嵌入式系統的實時性,去掉了不必要的功能。UDP 協議設計時不考慮數據校驗方法,只考慮數據的發送和接收功能。ICMP 協議設計時僅考慮了目的端不可達、源端抑制、超時、改變路由等差錯和回送請求處理。IP 協議設計時主要進行路由、向相鄰協議層傳遞數據包,而不考慮分片、重裝功能。ARP 協議主要負責將局域網中的32 位IP 地址轉換為對應的網卡的MAC 地址,它的功能包括發送ARP 請求和響應對方的ARP 請求,動態維護一個ARP 高速緩存。
通信協議構件組裝過程如圖2 所示。通信協議構件放在構件庫中,系統運行時,嵌入式Linux 操作系統調度協議組裝模塊,由該模塊依據系統網絡功能需求從構件庫中取出相應構件,動態配置通信協議棧。

嵌入式Linux 操作系統
因此,組裝的主要功能是負責實現嵌入式Linux 操作系統和構件庫的交互、監控構件的運行狀況,并記錄構件的特征以反饋給構件庫。
3.2 通信協議構件化的實現本文借鑒文獻[5]的思想,并結合上面提出的方法來實現通信協議構件化。各協議的實現類似,下面以TCP 協議為例說明實現過程。
將協議棧初始化文件中為協議分配內核存儲空間、向內核保存TCP 協議棧的鏈表結構、注冊、協議本身初始化的內容移入其模塊中,在模塊開始部分完成分配存儲空間、注冊、初始化等,在模塊結束部分完成釋放模塊所占內核空間、取消注冊、進行重置等。
修改協議實現文件tcp.c 和tcp.h ,創建新的模塊文件,協議實現文件中僅保留被其它協議使用的變量,其它內容放在新建的模塊文件中。
協議提供給其它協議的函數接口,由函數名調用改為函數指針調用,修改頭文件,為該新的接口實現添加定義及聲明,并將函數指針初始化指向一個空函數體。將其它協議中原來通過函數名調用改為相應的函數指針調用,這些函數指針是該協議構件的接口,可以保持不變,而接口提供的功能可以依據需要隨時修改。
修改網絡部分的內核符號表文件,既包括修改之后為其它協議提供的接口,又包括模塊化之后需要的其它協議提供的接口。
修改Makeflie 文件,增加相應的模塊化文件列表。
4 通信協議測試
構件化的協議的運行情況在MagicARM2200 目標板上進行測試,測試前需要配置軟硬
件環境,配置過程如下:用串口線和簡易仿真器連接PC 機和目標板,使用兩條獨立的網線分別將它們連接到以太網;在PC 機上安裝虛擬機5.5 和Red Hat Linux 9 ,將經過實時改進和裁剪的Linux 移植到該目標板。
4.1 測試ARP 協議構件
在內核無ARP 協議支持時,為了顯示ARP 緩存中的MAC、IP 地址信息,運行arp -a 命令,結果為空,并且其它網絡應用都不能工作,整個系統的網絡部分由于該底層協議的失效而癱瘓。將ARP 協議構件用insmod 命令裝入后,網絡部分恢復正常。
4.2 測試ICMP 協議構件
在內核不加載ICMP 協議構件時,從外界ping 主機,ping 命令顯示超時,即ping 不通。內核接收及處理傳來的ICMP 數據包的函數接口找不到相應的功能實現,不能正常返回確認消息包。在將ICMP 協議構件用insmod 命令裝入后,處理數據包的函數正確執行,顯示能夠ping 通。響應時間如表1 所示。

從表1 可以看出,當ICMP 協議作為模塊被加載后,ping 命令的響應時間比該協議編譯進內核的長,增長的幅度為(0.668-0.611)/0.611=0.093 ,性能下降不超過1%。而且,從內核啟動速度來看,構件化ICMP 協議的結果,由于構件化的內核在網絡部分啟動過程中沒有初始化ICMP 協議部分,啟動速度略有提高。
4.3 測試UDP 協議構件
為了便于觀察系統性能的變化,本文采用Linux 網絡性能測試軟件Netperf 對UDP 協議構件進行測試,主要測試UDP 的批量數據傳輸性能、請求和響應性能。測試結果如表2 所示。

從表2 可以看出,協議構件化之后的網絡性能有損失,其數據傳輸性能的下降幅度為(l55.2-140.3)/155.2=0.096 ,請求/響應性能的下降幅度為(620.1-*.9)/620.1=0.025 ,它們都低于一個數量級。
4.4 測試TCP 協議構件
在目標板和PC 機之間進行測試,PC 機作為客戶端,目標板作為服務器,并編寫客戶端和服務器測試程序。在內核不加載TCP 協議構件時,運行客戶端程序,PC 機提示不能和服務器連接;加載TCP 協議構件后,再次運行客戶端程序,觀察PC 機,顯示連接成功,在目標板上鍵入字符,在PC 機上可以顯示接收到的字符。
從上面的測試結果可知,對Linux 下的TCP/IP 構件化后,盡管系統性能會略有損失,但損失不大,用此較小的代價可以換取升級、維護的成本大大降低、新協議開發時間大大縮短,從而說明構件化協議的可行性和優越性,在實際應用中可以認為是一種有效的方法。
5 結論
本文針對嵌入式服務器的網絡實時通信的應用,將構件技術引入Linux 的TCP/IP 協議設計中,提出了一種構件化TCP/IP 協議棧中主要協議的方法,并對構件化的協議進行測試,結果表明構件化的協議可以動態載入實時改進和裁剪的Linux 系統,不僅減少了嵌入式Linux 內核的尺寸,而且增強了系統網絡通信協議設計的靈活性。
linux操作系統文章專題:linux操作系統詳解(linux不再難懂)tcp/ip相關文章:tcp/ip是什么
評論