簡介
硬體抽象層技術最初是由Microsoft公司為確保WindowsNT的穩定性和兼容性而提出的。針對過去Windows系列作業系統經常出現的系統當機或崩潰等現象,Microsoft總結髮現,程式設計直接與硬體通信,是造成系統不穩定的主要原因。在得出這個結論的基礎上,微軟公司在WindowsNT上取消了對硬體的直接訪問,首先提出了硬體抽象層(Hardware Abstraction Layer,簡稱HAL)的概念,硬體抽象層就是:“將硬體差別與作業系統其他層相隔離的一薄層軟體,它是通過採用使多種不同硬體在作業系統的其他部分看來是同一種虛擬機的做法來實現的。“後來,這種HAL設計思路被一些嵌入式作業系統參考,其系統核心被分成兩層,上層稱為“核心(Kernel)”,底層則稱為“硬體抽象層”。在EOS中,HAL獨立於EOS核心;對於作業系統和套用軟體而言,HAL是對底層架構的抽象。綜合分析HAL層的代碼,可以發現這些代碼與底層硬體設備是緊密相關的。因此,可以將硬體抽象層定義為所有依賴於底層硬體的軟體。即使有些EOS的HAL在物理上是與系統核心緊密聯繫的,甚至相互交叉的,但是從功能上可以從分層技術的角度去分析它 。
硬體抽象層是位於作業系統核心與硬體電路之間的接口層,其目的在於將硬體抽象化。它隱藏了特定平台的硬體接口細節,為作業系統提供虛擬硬體平台,使其具有硬體無關性,可在多種平台上進行移植。 從軟硬體測試的角度來看,軟硬體的測試工作都可分別基於硬體抽象層來完成,使得軟硬體測試工作的並行進行成為可能。
硬體抽象層是一個編程層,允許計算機作業系統在邏輯層而不是硬體層與硬體設備互動。Windows 2000就是支持硬體抽象層的作業系統之一。作業系統核心或者硬體驅動程式都可以調用硬體抽象層。無論哪種情況,調用程式都不用了解硬體的具體設計細節,只需要給出抽象層所需的參數即可。
思想
嵌入式作業系統的設計是一個涉及嵌入式軟體、硬體的方方面面的非常複雜的問題,解決這個問題可基於這樣一個基本原理:問題分解,各個擊破。設計易於移植的嵌入式平台,應遵循層次化、模組化和對象化的設計方法 。
層次化思想
層次化設計對於嵌入式作業系統而言,體現在嵌入式作業系統的縱向結構上。為了適應多種硬體平台,將作業系統劃分出來一個可以直接和硬體通訊的層次,然後為其上層提供抽象支持,下層通過API的形式向上層提供服務。這樣上層在進行硬體操作時,不需要了解設備的具體細節,從而大大減少系統理解和開發的複雜度。所以,層次化的方法主要有以下優點:節省成本、易於理解、易於擴展、易於排錯。
模組化思想
模組化最大特點就是將接口和實現分離開來,將具體的功能塊隱藏在抽象的接口背後,以保證每個模組可以在不影響其他模組的情況下進行改變。這樣,可將模組之間的依賴關係僅僅限定於接口。模組化方法與層次化方法不同,軟體模組之間是相互獨立的關係,而不是層次之間相互依賴的關係。
對象化思想
就當前的目的來說,對象是結構化使用模組的方法。面向對象設計方法將數據與數據上的操作封裝在對象這個模組實體中,外界不能直接對對象內部進行訪問和操作,只能通過訊息的方式間接訪問。因此,面向對象設計方法能夠使軟體開發人員更加容易理解,並且也提高了軟體的擴展性、維護性和重用性。
下面具體講述了這些功能實現的原理。
首先,為了更好地實現嵌入式系統中硬體相關和硬體無關兩部分程式代碼的隔離,使得硬體抽象層為上層軟體提供一個已禁止硬體差異的接口,可將HAL進一步細化為幾個子層次,即採用層次結構設計的思想。那么,在層次結構設計中,各子層之間定義了統一的接口調用。這些接口採用C/C++語言進行編碼,即下層的功能實現需要按照與上層確定的接口規範來進行。而這些上下層之間的接口是使用宏定義的方式進行的。宏定義在預編譯時進行替換,沒有執行時的性能損失。在系統初始化階段,片級初始化、板級初始化和系統級初始化基本上就是使用了宏定義這一特點。
其次,為保證開發語言的移植性,引入面向對象的思想。C語言雖不能直接支持面向對象的數據結構,如數據類型的動態綁定、多態函式或類繼承。但在設計時可以借鑑面向對象語言的特點實現基於C語言的對象,卻又不依賴於它。這樣,就使系統開發難度大為降低。
那么,與硬體相關的驅動程式是如何利用面向對象的思想進行設計的?在系統初始化階段結束以後,作業系統獲得了系統控制權。HAL層的主要工作就變為向作業系統提供服務:將上層的調用轉化為對硬體的直接訪問和控制,具體活動為建立與硬體相關的驅動程式。這裡的驅動程式指的是作業系統(通常被包含在I/O子系統里)的一些標準I/O函式,比如任何一個設備都有的Create、Destroy、Open、Close、Write、Read和Ioctl等函式。在這個階段完成兩個工作:
1、映射驅動程式函式到HALAPI經過改造後的驅動程式不再直接和硬體打交道,而是通過HALAPI進行硬體資源的訪問和控制。圖表示了硬體相關設備驅動程式的標準I/O函式與HALAPI集合的映射關係。
2、I/O驅動程式表、設備表與HALAPI的關聯如圖,顯示了I/O子系統通常維護的I/O驅動程式表。從圖中可看出,驅動程式表的第二行、第N元素是一個指向內部的驅動函式UARTlCreate()的指針。這個指針建立了通用的Creat函式和設備指定的Creat之間的連線。使用I/O子系統提供的工具函式,可以將任何HALAPI安裝到驅動程式表中或從表中刪除。
I/O子系統中的Create函式用來創建一個虛擬設備實例,每個虛擬實例都以唯一的名字插入到I/O子系統的設備表中。圖中的設備表顯示了UART0與USB0兩個虛擬實例,設備表中的每一項包含通用信息以及特定的實例信息。設備項的通用部分包括實例的唯一名字和一個對HALAPI的引用。設備項特定的實例信息是由HALAPI為保持特定數據的每一個實例分配的一塊記憶體,HALAPI初始化並維護。此信息的內容依賴於HALAPI的實現,HALAPI是唯一可以訪問和中斷此數據的實體。
原理
嵌入式系統是一類特殊的計算機系統。它自底向上包括3個主要部分:硬體環境、嵌入式作業系統和嵌入式應用程式。硬體環境是整個嵌入式作業系統和應用程式運行的硬體平台,不同的套用通常有不同的硬體環境;因此如何有效地使嵌入式操作套用於各種不同的套用環境,是嵌入式作業系統發展中所必須解決的關鍵問題。硬體抽象層通過硬體抽象層接口向作業系統以及應用程式提供對硬體進行抽象後的服務。當作業系統或應用程式使用硬體抽象層API進行設計時,只要硬體抽象層API能夠在下層硬體平台上實現,那么作業系統和應用程式的代碼就可以移植。這樣,原先嵌入式系統的3層結構逐步演化為一種4層結構。圖顯示了引入硬體抽象層後的嵌入式系統的結構 。
在整個嵌入式系統設計過程中,硬體抽象層同樣發揮著不可替代的作用。傳統的設計流程是採用瀑布式設計開發過程,首先是硬體平台的製作和調試,而後是在已經定型的硬體平台的基礎上再進行軟體設計。由於硬體和軟體的設計過程是串列的,因此需要很長的設計周期;而硬體抽象層能夠使軟體設計在硬體設計結束前開始進行,使整個嵌入式系統的設計過程成為軟硬體設計並行的V模式開發過程,如圖所示。這樣兩者的設計過程大致是同時進行的或是並發的,縮短了整個設計周期。結構。在整個嵌入式系統設計過程中,硬體抽象層同樣發揮著不可替代的作用。傳統的設計流程是採用瀑布式設計開發過程,首先是硬體平台的製作和調試,而後是在已經定型的硬體平台的基礎上再進行軟體設計。由於硬體和軟體的設計過程是串列的,因此需要很長的設計周期;而硬體抽象層能夠使軟體設計在硬體設計結束前開始進行,使整個嵌入式系統的設計過程成為軟硬體設計並行的V模式開發過程,如圖所示。這樣兩者的設計過程大致是同時進行的或是並發的,縮短了整個設計周期。
BSP分析
作為硬體抽象層的一種實現,板級支持包BSP(Board Support Package)是現有的大多數商用嵌入式作業系統實現可移植性所採用的一種方案。BSP隔離了所支持的嵌入式作業系統與底層硬體平台之間的相關性,使嵌入式作業系統能夠通用於BSP所支持的硬體平台,從而實現嵌入式作業系統的可移植性和跨平台性,以及嵌入式作業系統的通用性、復用性。然而現有套用較為廣泛的BSP形式的硬體抽象層,完全是為了現有通用或商業嵌入式作業系統在不同硬體平台間的移植而設計的,因此BSP形式的硬體抽象層與BSP所向上支持的嵌入式作業系統是緊密相關的。在同一種嵌入式微處理器的硬體平台上支持不同嵌入式作業系統的BSP之間不僅從組成結構、向作業系統核心所提供的功能以及所定義的服務的接口都完全不同,因而一種嵌入式作業系統的BSP不可能用於其他嵌入式作業系統。這種硬體抽象層是一種封閉的專用硬體抽象層。因此,我們提出了為上層嵌入式作業系統核心的開發和構建提供一種開放、通用的硬體抽象層平台,使得在某種硬體平台上的嵌入式作業系統核心的開發能夠在支持這種硬體平台的硬體抽象層上進行。
特點
*硬體抽象層具有與硬體的密切相關性
*硬體抽象層具有與作業系統無關性
*接口定義的功能應包含硬體或系統所需硬體支持的所有功能
*接口定義簡單明了,太多接口函式會增加軟體模擬的複雜性
*具有可測性的接口設計有利於系統的軟硬體測試和集成
工作模式
硬體抽象層對用戶設備接口的功能模擬主要由虛擬驅動模組完成,包括數據包的收發及協定報文的預處理等工作,為上層協定軟體提供標準的API函式, 而對用戶設備的接口管理則由上層網路管理軟體通地設備管理模組對其進行管理配置及監控,內部通信模組運行於內部隊乙太網絡,協調各模組之間的功能接口,保證從處理單元與主處理單元之間實時可靠的數據傳輸.