嵌入式Linux通信中構(gòu)件技術(shù)應(yīng)用研究
考慮到TCP 協(xié)議是面向連接的、端對端的可靠通信協(xié)議,為保證遠(yuǎn)程客戶端與本地嵌入式系統(tǒng)服務(wù)器的正確通信,采取了相應(yīng)機(jī)制來保證它的可靠性和實時性,即連接的建立與關(guān)閉、超時重傳機(jī)制、數(shù)據(jù)包確認(rèn)機(jī)制、流量控制等。因此,將TCP 協(xié)議按應(yīng)用功能劃分成客戶端模塊和服務(wù)器端模塊,前者主動建立連接,后者*連接,連接建立后雙方進(jìn)行數(shù)據(jù)信息的發(fā)送或接收。
相對于TCP 協(xié)議,ARP、IP、ICMP、UDP 等協(xié)議功能較簡單,對它們不劃分模塊,每個協(xié)議按其完成的功能設(shè)計成一個構(gòu)件,但考慮到嵌入式系統(tǒng)的實時性,去掉了不必要的功能。UDP 協(xié)議設(shè)計時不考慮數(shù)據(jù)校驗方法,只考慮數(shù)據(jù)的發(fā)送和接收功能。ICMP 協(xié)議設(shè)計時僅考慮了目的端不可達(dá)、源端抑制、超時、改變路由等差錯和回送請求處理。IP 協(xié)議設(shè)計時主要進(jìn)行路由、向相鄰協(xié)議層傳遞數(shù)據(jù)包,而不考慮分片、重裝功能。ARP 協(xié)議主要負(fù)責(zé)將局域網(wǎng)中的32 位IP 地址轉(zhuǎn)換為對應(yīng)的網(wǎng)卡的MAC 地址,它的功能包括發(fā)送ARP 請求和響應(yīng)對方的ARP 請求,動態(tài)維護(hù)一個ARP 高速緩存。
通信協(xié)議構(gòu)件組裝過程如圖2 所示。通信協(xié)議構(gòu)件放在構(gòu)件庫中,系統(tǒng)運行時,嵌入式Linux 操作系統(tǒng)調(diào)度協(xié)議組裝模塊,由該模塊依據(jù)系統(tǒng)網(wǎng)絡(luò)功能需求從構(gòu)件庫中取出相應(yīng)構(gòu)件,動態(tài)配置通信協(xié)議棧。
嵌入式Linux 操作系統(tǒng)
因此,組裝的主要功能是負(fù)責(zé)實現(xiàn)嵌入式Linux 操作系統(tǒng)和構(gòu)件庫的交互、監(jiān)控構(gòu)件的運行狀況,并記錄構(gòu)件的特征以反饋給構(gòu)件庫。
3.2 通信協(xié)議構(gòu)件化的實現(xiàn)本文借鑒文獻(xiàn)[5]的思想,并結(jié)合上面提出的方法來實現(xiàn)通信協(xié)議構(gòu)件化。各協(xié)議的實現(xiàn)類似,下面以TCP 協(xié)議為例說明實現(xiàn)過程。
將協(xié)議棧初始化文件中為協(xié)議分配內(nèi)核存儲空間、向內(nèi)核保存TCP 協(xié)議棧的鏈表結(jié)構(gòu)、注冊、協(xié)議本身初始化的內(nèi)容移入其模塊中,在模塊開始部分完成分配存儲空間、注冊、初始化等,在模塊結(jié)束部分完成釋放模塊所占內(nèi)核空間、取消注冊、進(jìn)行重置等。
修改協(xié)議實現(xiàn)文件tcp.c 和tcp.h ,創(chuàng)建新的模塊文件,協(xié)議實現(xiàn)文件中僅保留被其它協(xié)議使用的變量,其它內(nèi)容放在新建的模塊文件中。
協(xié)議提供給其它協(xié)議的函數(shù)接口,由函數(shù)名調(diào)用改為函數(shù)指針調(diào)用,修改頭文件,為該新的接口實現(xiàn)添加定義及聲明,并將函數(shù)指針初始化指向一個空函數(shù)體。將其它協(xié)議中原來通過函數(shù)名調(diào)用改為相應(yīng)的函數(shù)指針調(diào)用,這些函數(shù)指針是該協(xié)議構(gòu)件的接口,可以保持不變,而接口提供的功能可以依據(jù)需要隨時修改。
修改網(wǎng)絡(luò)部分的內(nèi)核符號表文件,既包括修改之后為其它協(xié)議提供的接口,又包括模塊化之后需要的其它協(xié)議提供的接口。
修改Makeflie 文件,增加相應(yīng)的模塊化文件列表。
4 通信協(xié)議測試
構(gòu)件化的協(xié)議的運行情況在MagicARM2200 目標(biāo)板上進(jìn)行測試,測試前需要配置軟硬
件環(huán)境,配置過程如下:用串口線和簡易仿真器連接PC 機(jī)和目標(biāo)板,使用兩條獨立的網(wǎng)線分別將它們連接到以太網(wǎng);在PC 機(jī)上安裝虛擬機(jī)5.5 和Red Hat Linux 9 ,將經(jīng)過實時改進(jìn)和裁剪的Linux 移植到該目標(biāo)板。
4.1 測試ARP 協(xié)議構(gòu)件
在內(nèi)核無ARP 協(xié)議支持時,為了顯示ARP 緩存中的MAC、IP 地址信息,運行arp -a 命令,結(jié)果為空,并且其它網(wǎng)絡(luò)應(yīng)用都不能工作,整個系統(tǒng)的網(wǎng)絡(luò)部分由于該底層協(xié)議的失效而癱瘓。將ARP 協(xié)議構(gòu)件用insmod 命令裝入后,網(wǎng)絡(luò)部分恢復(fù)正常。
4.2 測試ICMP 協(xié)議構(gòu)件
在內(nèi)核不加載ICMP 協(xié)議構(gòu)件時,從外界ping 主機(jī),ping 命令顯示超時,即ping 不通。內(nèi)核接收及處理傳來的ICMP 數(shù)據(jù)包的函數(shù)接口找不到相應(yīng)的功能實現(xiàn),不能正常返回確認(rèn)消息包。在將ICMP 協(xié)議構(gòu)件用insmod 命令裝入后,處理數(shù)據(jù)包的函數(shù)正確執(zhí)行,顯示能夠ping 通。響應(yīng)時間如表1 所示。
從表1 可以看出,當(dāng)ICMP 協(xié)議作為模塊被加載后,ping 命令的響應(yīng)時間比該協(xié)議編譯進(jìn)內(nèi)核的長,增長的幅度為(0.668-0.611)/0.611=0.093 ,性能下降不超過1%。而且,從內(nèi)核啟動速度來看,構(gòu)件化ICMP 協(xié)議的結(jié)果,由于構(gòu)件化的內(nèi)核在網(wǎng)絡(luò)部分啟動過程中沒有初始化ICMP 協(xié)議部分,啟動速度略有提高。
4.3 測試UDP 協(xié)議構(gòu)件
為了便于觀察系統(tǒng)性能的變化,本文采用Linux 網(wǎng)絡(luò)性能測試軟件Netperf 對UDP 協(xié)議構(gòu)件進(jìn)行測試,主要測試UDP 的批量數(shù)據(jù)傳輸性能、請求和響應(yīng)性能。測試結(jié)果如表2 所示。
從表2 可以看出,協(xié)議構(gòu)件化之后的網(wǎng)絡(luò)性能有損失,其數(shù)據(jù)傳輸性能的下降幅度為(l55.2-140.3)/155.2=0.096 ,請求/響應(yīng)性能的下降幅度為(620.1-*.9)/620.1=0.025 ,它們都低于一個數(shù)量級。
4.4 測試TCP 協(xié)議構(gòu)件
在目標(biāo)板和PC 機(jī)之間進(jìn)行測試,PC 機(jī)作為客戶端,目標(biāo)板作為服務(wù)器,并編寫客戶端和服務(wù)器測試程序。在內(nèi)核不加載TCP 協(xié)議構(gòu)件時,運行客戶端程序,PC 機(jī)提示不能和服務(wù)器連接;加載TCP 協(xié)議構(gòu)件后,再次運行客戶端程序,觀察PC 機(jī),顯示連接成功,在目標(biāo)板上鍵入字符,在PC 機(jī)上可以顯示接收到的字符。
從上面的測試結(jié)果可知,對Linux 下的TCP/IP 構(gòu)件化后,盡管系統(tǒng)性能會略有損失,但損失不大,用此較小的代價可以換取升級、維護(hù)的成本大大降低、新協(xié)議開發(fā)時間大大縮短,從而說明構(gòu)件化協(xié)議的可行性和優(yōu)越性,在實際應(yīng)用中可以認(rèn)為是一種有效的方法。
5 結(jié)論
本文針對嵌入式服務(wù)器的網(wǎng)絡(luò)實時通信的應(yīng)用,將構(gòu)件技術(shù)引入Linux 的TCP/IP 協(xié)議設(shè)計中,提出了一種構(gòu)件化TCP/IP 協(xié)議棧中主要協(xié)議的方法,并對構(gòu)件化的協(xié)議進(jìn)行測試,結(jié)果表明構(gòu)件化的協(xié)議可以動態(tài)載入實時改進(jìn)和裁剪的Linux 系統(tǒng),不僅減少了嵌入式Linux 內(nèi)核的尺寸,而且增強(qiáng)了系統(tǒng)網(wǎng)絡(luò)通信協(xié)議設(shè)計的靈活性。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)tcp/ip相關(guān)文章:tcp/ip是什么
評論