硬體抽象層是位於作業系統核心與硬體電路之間的介面層,其目的在於將硬體抽象化。它隱藏了特定平臺的硬體介面細節,為作業系統提供虛擬硬體平臺,使其具有硬體無關性,可在多種平臺上進行移植。從軟硬體測試的角度來看,軟硬體的測試工作都可分別基於硬體抽象層來完成,使得軟硬體測試工作的並行進行成為可能。
硬體抽象層技術最初是由 Microsoft 公司為確保 Windows NT 的穩定性和相容性而提出的。針對過去 Windows 系列作業系統經常出現的系統宕機或崩潰等現象, Microsoft 總結髮現,程式設計直接與硬體通訊,是造成系統不穩定的主要原因。在得出這個結論的基礎上,微軟公司在 Windows NT 上取消了對硬體的直接存取,首先提出了硬體抽象層 (Hardware Abstraction Layer ,簡稱 HAL ) 的概念,硬體抽象層就是: 「 將硬體差別與作業系統其他層相隔離的一薄層軟體,它是通過採用使多種不同硬體在作業系統的其他部分看來是同一種虛擬機器器的做法來實現的。 「
後來,這種 HAL 設計思路被一些嵌入式作業系統參考,其系統核心被分成兩層,上層稱為 「 核心 (Kernel)」 ,底層則稱為 「 硬體抽象層 」。
Kernel /ˈkɜːrnl/
The most material and central part; the core;
硬體抽象層是位於作業系統核心與硬體電路之間的介面層,其目的在於將硬體抽象化。它隱藏了特定平臺的硬體介面細節,為作業系統提供虛擬硬體平臺,使其具有硬體無關性,可在多種平臺上進行移植。從軟硬體測試的角度來看,軟硬體的測試工作都可分別基於硬體抽象層來完成,使得軟硬體測試工作的並行進行成為可能。
硬體抽象層是一個程式設計層,允許計算機作業系統在邏輯層而不是硬體層與硬體裝置互動。 Windows 2000就是支援硬體抽象層的作業系統之一。作業系統核心或者硬體驅動程式都可以呼叫硬體抽象層。無論哪種情況,呼叫程式都不用瞭解硬體的具體設計細節,只需要給出抽象層所需的引數即可 。
嵌入式作業系統的設計是一個涉及嵌入式軟體 、 硬體的方方面面的非常複雜的問題,解決這個問題可基於這樣一個基本原理:問題分解,各個擊破。設計易於移植的嵌入式平臺,應遵循層次化 、 模組化和物件化的設計方法。
(1)層次化思想
層次化設計對於嵌入式作業系統而言,體現在嵌入式作業系統的縱向結構上。為了適應多種硬體平臺,將作業系統劃分出來一個可以直接和硬體通訊的層次,然後為其上層提供抽象支援,下層通過 API 的形式向上層提供服務。這樣上層在進行硬體操作時,不需要了解裝置的具體細節,從而大大減少系統理解和開發的複雜度。所以,層次化的方法主要有以下優點:節省成本 、 易於理解 、 易於擴充套件 、 易於排錯。
(2)模組化思想
模組化最大特點就是將介面和實現分離開來,將具體的功能塊隱藏在抽象的介面背後,以保證每個模組可以在不影響其他模組的情況下進行改變。這樣,可將模組之間的依賴關係僅僅限定於介面。模組化方法與層次化方法不同,軟體模組之間是相互獨立的關係,而不是層次之間相互依賴的關係。
(3)物件化思想
就當前的目的來說,物件是結構化使用模組的方法。物件導向設計方法將資料與資料上的操作封裝在物件這個模組實體中,外界不能直接對物件內部進行存取和操作,只能通過訊息的方式間接存取。因此,物件導向設計方法能夠使軟體開發人員更加容易理解,並且也提高了軟體的擴充套件性 、 維護性和重用性。
嵌入式系統是一類特殊的計算機系統。它自底向上包括3個主要部分 : 硬體環境 、 嵌入式作業系統和嵌入式應用程式。硬體環境是整個嵌入式作業系統和應用程式執行的硬體平臺,不同的應用通常有不同的硬體環境 ; 因此如何有效地使嵌入式操作應用於各種不同的應用環境,是嵌入式作業系統發展中所必須解決的關鍵問題。
硬體抽象層通過硬體抽象層介面向作業系統以及應用程式提供對硬體進行抽象後的服務。當作業系統或應用程式使用硬體抽象層 API 進行設計時,只要硬體抽象層 API 能夠在下層硬體平臺上實現,那麼作業系統和應用程式的程式碼就可以移植。這樣,原先嵌入式系統的3層結構逐步演化為一種4層結構。下圖顯示了引入硬體抽象層後的嵌入式系統的結構。
在整個嵌入式系統設計過程中,硬體抽象層同樣發揮著不可替代的作用。傳統的設計流程是採用瀑布式設計開發過程,首先是硬體平臺的製作和偵錯,而後是在已經定型的硬體平臺的基礎上再進行軟體設計。由於硬體和軟體的設計過程是序列的,因此需要很長的設計週期 ; 而硬體抽象層能夠使軟體設計在硬體設計結束前開始進行,使整個嵌入式系統的設計過程成為軟硬體設計並行的 V 模式開發過程,如下圖所示。
這樣兩者的設計過程大致是同時進行的或是並行的,縮短了整個設計週期。