王頌文 孫乃川
[摘要]針對嵌入式系統(tǒng)設(shè)計的關(guān)鍵問題,研究兩臺終端網(wǎng)絡(luò)通信實現(xiàn)路由功能,通過內(nèi)核改造提高系統(tǒng)的實時性,編寫基于PCI總線的硬盤控制器驅(qū)動模塊,將PCI設(shè)備采集的數(shù)據(jù)不經(jīng)過系統(tǒng)內(nèi)存,以DMA直接傳輸?shù)接脖P陣列中,實現(xiàn)數(shù)據(jù)的高速存儲,從而使系統(tǒng)得到優(yōu)化。
[關(guān)鍵詞]嵌入式系統(tǒng)路由功能數(shù)據(jù)存儲實時性
中圖分類號:TP2文獻(xiàn)標(biāo)識碼:A文章編號:1671—7597(2009)1020083—01
一、嵌入式系統(tǒng)的構(gòu)建
嵌入式系統(tǒng)由嵌入式硬件系統(tǒng)和嵌入式軟件系統(tǒng)組成。硬件系統(tǒng)主要由處于核心地位的嵌入式處理器、相關(guān)支撐硬件、外圍電路等組成;軟件系統(tǒng)包括操作系統(tǒng)和應(yīng)用軟件。Mnux操作系統(tǒng)憑借其開放性、模塊化、能夠支持多種體系結(jié)構(gòu)、可移植性好、效率高、直接提供網(wǎng)絡(luò)支持,成為該領(lǐng)域開發(fā)的重要參考平臺。
由于嵌入式系統(tǒng)的硬件資源有限,開發(fā)設(shè)計時不能直接把Linux作為操作系統(tǒng),需要針對具體的應(yīng)用,通過內(nèi)核配置、裁減shell等進(jìn)行定制。Linux的基本組件包括:內(nèi)存管理、進(jìn)程和調(diào)度管理,根文件系統(tǒng),IDE/MEM驅(qū)動程序和一些必要的I/0子系統(tǒng)。可裁減的組件包括:網(wǎng)絡(luò)協(xié)議、文件系統(tǒng)、字符及模塊設(shè)備驅(qū)動程序、網(wǎng)絡(luò)設(shè)備部件[1]。設(shè)計時根據(jù)具體需要,定制出最小適用內(nèi)核,修改內(nèi)存、網(wǎng)口的配置等部分硬件驅(qū)動來滿足實際系統(tǒng)要求,針對具體板級設(shè)備的驅(qū)動程序進(jìn)行移植修改,使內(nèi)核能進(jìn)行編譯、下載和運行。
二、實現(xiàn)網(wǎng)絡(luò)終端路由功能
帶有路由器功能的嵌入式網(wǎng)絡(luò)終端,通常采用包括進(jìn)行路由表維護(hù)、轉(zhuǎn)換內(nèi)外網(wǎng)地址、分組校驗和重新計算的方式實現(xiàn)路由功能,這種方式對硬件需求、硬件成本較高,并且需要內(nèi)部網(wǎng)絡(luò)終端解決由于網(wǎng)絡(luò)地址轉(zhuǎn)換造成的某些問題。
針對僅有兩臺終端,且其中之一為嵌入式網(wǎng)絡(luò)終端的情況,基于ADSL接入方式,通過嵌入式網(wǎng)絡(luò)終端中實現(xiàn)簡單有效的路由功能,向內(nèi)部網(wǎng)絡(luò)的另外一臺終端提供公網(wǎng)IP地址等網(wǎng)絡(luò)參數(shù),避免了上述網(wǎng)絡(luò)地址轉(zhuǎn)換等復(fù)雜操作,占用較少資源,適合用在資源有限的嵌入式網(wǎng)絡(luò)終端中。
實現(xiàn)路由功能的方法:嵌入式網(wǎng)絡(luò)終端的物理層設(shè)備一般采用以太網(wǎng)卡。以PPPoE完成與ADSL適配器的通信;在嵌入式網(wǎng)絡(luò)終端中置入交換機(jī)芯片或集線器,作為與另外一臺終端通信的物理層設(shè)備;嵌入式終端內(nèi)置DHCP服務(wù)器提供內(nèi)部網(wǎng)絡(luò)的另外一臺終端提供的網(wǎng)絡(luò)參數(shù)。1、分組接收和轉(zhuǎn)發(fā)。嵌入式網(wǎng)絡(luò)終端可用PPP和PPPoE完成撥號連接網(wǎng)絡(luò)以及IP分組的接收與轉(zhuǎn)發(fā),由于向內(nèi)部網(wǎng)絡(luò)中另一臺終端提供的IP地址與嵌入式網(wǎng)絡(luò)終端自身相同,從而避免了實現(xiàn)路由表和網(wǎng)絡(luò)地址轉(zhuǎn)換等占用資源較多的功能和由網(wǎng)絡(luò)地址轉(zhuǎn)換引起的IP首部以及TCP/UDP分組校驗和的重新計算,僅需要實現(xiàn)分組的轉(zhuǎn)發(fā)和接收。針對特定的網(wǎng)絡(luò)應(yīng)用對分組的接收進(jìn)行過濾,避免嵌入式終端對無關(guān)分組的多余處理,通過在路由模塊中添加接收表實現(xiàn)對無關(guān)分組的過濾,進(jìn)一步減少路由功能占用的嵌入式終端系統(tǒng)資源。2、內(nèi)部終端與嵌入式網(wǎng)絡(luò)終端的以太網(wǎng)通信:嵌入式終端與內(nèi)部網(wǎng)絡(luò)終端通過嵌入式終端內(nèi)部的集線器或交換機(jī)芯片實現(xiàn)以太網(wǎng)物理連接;由于嵌入式網(wǎng)絡(luò)終端向內(nèi)網(wǎng)終端提供的IP地址與其自身相同,當(dāng)網(wǎng)絡(luò)終端以以太網(wǎng)方式接入網(wǎng)絡(luò)時,由于要向其提供網(wǎng)關(guān)IP地址以及子網(wǎng)掩碼,就要虛擬出另一個IP地址作為內(nèi)網(wǎng)終端的網(wǎng)關(guān)IP地址。通過在嵌入式網(wǎng)絡(luò)終端協(xié)議棧的ARP處理模塊中加入ARP代理,實現(xiàn)嵌入式網(wǎng)絡(luò)終端的透明路由-保證另外一臺終端所有的網(wǎng)絡(luò)分組均發(fā)送至嵌入式網(wǎng)絡(luò)終端。此外,對于Pc機(jī)等標(biāo)準(zhǔn)的網(wǎng)絡(luò)終端,以DHCP獲取到網(wǎng)絡(luò)參數(shù)后,要拒絕回應(yīng)對自身公網(wǎng)IP地址的免費ARP請求[2],會使用免費ARP的方式檢測獲取的IP地址是否已被占用。
三、系統(tǒng)實時性的改造
實時性對嵌式系統(tǒng)來說是至關(guān)重要的,特別是在硬實時性應(yīng)用的場合,實時性要求更高。由于LinuX本質(zhì)上是分時系統(tǒng),實時性有一瘧缺陷:周期模式定時器頻較低、中斷柄不可調(diào)度、易于引起由于進(jìn)程采用多級輪轉(zhuǎn)調(diào)度算法造成的截止時間無法完成任務(wù)、中斷和調(diào)度時延等。Linux是通用操作系統(tǒng),而實時系統(tǒng)是面向用戶和應(yīng)用的,因此在構(gòu)造實時系統(tǒng)時,可根據(jù)具體需要進(jìn)行定制和修改。
實時內(nèi)核的改造:1、雙內(nèi)核方法。通過在Linux操作系統(tǒng)的最底層增加一層實時核心層,實現(xiàn)同一個硬件平臺上兩個相互配合工作的系統(tǒng)核心,分別提供實時多任務(wù)管理和非實時通用功能,技術(shù)關(guān)鍵要求運行在常規(guī)Linux核心上的所有非實時任務(wù)必須支持可搶占式調(diào)度。實時核心負(fù)責(zé)硬件及實時任務(wù)管理,不通過操作中斷控制寄存器,當(dāng)中斷信號需要實時進(jìn)程來處理時,實時進(jìn)程則搶占Linux內(nèi)核;Linux核心任務(wù)來調(diào)度的優(yōu)先級最低,只有沒有可運行的實時任務(wù)時才會被調(diào)度,通過共享內(nèi)存和FIFO設(shè)備接口實現(xiàn)實時進(jìn)程和普通進(jìn)程需要通訊,當(dāng)中斷信號需要Linux內(nèi)核來處理時,由實時內(nèi)核將信號傳給Linux內(nèi)核。2、兼容內(nèi)核方法。充分考慮系統(tǒng)實時性的要求,設(shè)計一種完全獨立、但其API與Linux核心相兼容的實時核心,作為Linux實時系統(tǒng)的獨立核。3、資源內(nèi)核方法。實時核心提供了實時應(yīng)用可構(gòu)建的基礎(chǔ),允許實時應(yīng)用可配置,可以通過動態(tài)地改變實時任務(wù)屬性以及在整個系統(tǒng)中的優(yōu)先級,實現(xiàn)以資源為中心指導(dǎo)實時核心提供精確的、可搶占的獲取系統(tǒng)資源。
四、高速數(shù)據(jù)存儲
嵌入式Linux下高速數(shù)據(jù)存儲,最基本、最主要的操作是數(shù)據(jù)的傳輸,在高速下控制數(shù)據(jù)的傳輸是保證高速存儲數(shù)據(jù)的關(guān)鍵。一般的程序控制傳送方式是以CPU為中心,CPU提供傳送數(shù)據(jù)的源地址和目的地址、對地址的修改和對數(shù)據(jù)長度的計數(shù),并判斷數(shù)據(jù)傳送是否完成。這種方式傳送每字節(jié)數(shù)據(jù)CFU都要執(zhí)行若干條指令,這就必然增加除讀/寫數(shù)據(jù)以外的額外的時間開銷,數(shù)據(jù)存儲速度慢。
在嵌入式Linux基礎(chǔ)上,SCSI控制器外接多個SCSI硬盤,利用RAID技術(shù)把多塊獨立的物理硬盤按不同方式組合,形成一個邏輯硬盤組,同時對多塊磁盤存取數(shù)據(jù),從而提供比單塊硬盤更高的存儲性能和數(shù)據(jù)冗余的技術(shù)[3],通過編寫基于PCI總線的硬盤控制器驅(qū)動模塊,將PCI設(shè)各采集的數(shù)據(jù)通DMA直接傳輸?shù)接脖P陣列中,中間不經(jīng)過系統(tǒng)內(nèi)存。采用直接存儲器訪問即DMA技術(shù)來實現(xiàn)數(shù)據(jù)傳輸,不要CPU介入,在存儲器和外部設(shè)備之間直接進(jìn)行高速數(shù)據(jù)傳送,能夠大大提高數(shù)據(jù)的傳輸速度,提高數(shù)據(jù)的存儲效率。