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