硬件抽象層是位于操作系統(tǒng)內(nèi)核與硬件電路之間的接口層邑跪,其目的在于將硬件抽象化榜轿。它隱藏了特定平臺(tái)的硬件接口細(xì)節(jié)亥贸,為操作系統(tǒng)提供虛擬硬件平臺(tái)器虾,使其具有硬件無關(guān)性讯嫂,可在多種平臺(tái)上進(jìn)行移植。從軟硬件測試的角度來看兆沙,軟硬件的測試工作都可分別基于硬件抽象層來完成欧芽,使得軟硬件測試工作的并行進(jìn)行成為可能。
1 簡介
硬件抽象層技術(shù)最初是由 Microsoft 公司為確保 Windows NT 的穩(wěn)定性和兼容性而提出的葛圃。針對(duì)過去 Windows 系列操作系統(tǒng)經(jīng)常出現(xiàn)的系統(tǒng)死機(jī)或崩潰等現(xiàn)象千扔, Microsoft 總結(jié)發(fā)現(xiàn)憎妙,程序設(shè)計(jì)直接與硬件通信,是造成系統(tǒng)不穩(wěn)定的主要原因曲楚。在得出這個(gè)結(jié)論的基礎(chǔ)上厘唾,微軟公司在 Windows NT 上取消了對(duì)硬件的直接訪問,首先提出了硬件抽象層 (Hardware Abstraction Layer 龙誊,簡稱 HAL ) 的概念抚垃,硬件抽象層就是: “ 將硬件差別與操作系統(tǒng)其他層相隔離的一薄層軟件,它是通過采用使多種不同硬件在操作系統(tǒng)的其他部分看來是同一種虛擬機(jī)的做法來實(shí)現(xiàn)的趟大。 “
后來鹤树,這種 HAL 設(shè)計(jì)思路被一些嵌入式操作系統(tǒng)參考,其系統(tǒng)內(nèi)核被分成兩層逊朽,上層稱為 “ 內(nèi)核 (Kernel)” 魂迄,底層則稱為 “ 硬件抽象層 ”。
Kernel /?k??rnl/
The most material and central part; the core;
硬件抽象層是位于操作系統(tǒng)內(nèi)核與硬件電路之間的接口層惋耙,其目的在于將硬件抽象化捣炬。它隱藏了特定平臺(tái)的硬件接口細(xì)節(jié),為操作系統(tǒng)提供虛擬硬件平臺(tái)绽榛,使其具有硬件無關(guān)性湿酸,可在多種平臺(tái)上進(jìn)行移植。從軟硬件測試的角度來看灭美,軟硬件的測試工作都可分別基于硬件抽象層來完成推溃,使得軟硬件測試工作的并行進(jìn)行成為可能。
硬件抽象層是一個(gè)編程層届腐,允許計(jì)算機(jī)操作系統(tǒng)在邏輯層而不是硬件層與硬件設(shè)備交互铁坎。 Windows 2000就是支持硬件抽象層的操作系統(tǒng)之一。操作系統(tǒng)核心或者硬件驅(qū)動(dòng)程序都可以調(diào)用硬件抽象層犁苏。無論哪種情況硬萍,調(diào)用程序都不用了解硬件的具體設(shè)計(jì)細(xì)節(jié),只需要給出抽象層所需的參數(shù)即可 围详。
2 思想
嵌入式操作系統(tǒng)的設(shè)計(jì)是一個(gè)涉及嵌入式軟件 朴乖、 硬件的方方面面的非常復(fù)雜的問題,解決這個(gè)問題可基于這樣一個(gè)基本原理:問題分解助赞,各個(gè)擊破买羞。設(shè)計(jì)易于移植的嵌入式平臺(tái),應(yīng)遵循層次化 雹食、 模塊化和對(duì)象化的設(shè)計(jì)方法畜普。
(1)層次化思想
層次化設(shè)計(jì)對(duì)于嵌入式操作系統(tǒng)而言,體現(xiàn)在嵌入式操作系統(tǒng)的縱向結(jié)構(gòu)上群叶。為了適應(yīng)多種硬件平臺(tái)吃挑,將操作系統(tǒng)劃分出來一個(gè)可以直接和硬件通訊的層次钝荡,然后為其上層提供抽象支持,下層通過 API 的形式向上層提供服務(wù)儒鹿。這樣上層在進(jìn)行硬件操作時(shí),不需要了解設(shè)備的具體細(xì)節(jié)几晤,從而大大減少系統(tǒng)理解和開發(fā)的復(fù)雜度约炎。所以,層次化的方法主要有以下優(yōu)點(diǎn):節(jié)省成本 蟹瘾、 易于理解 圾浅、 易于擴(kuò)展 、 易于排錯(cuò)憾朴。
(2)模塊化思想
模塊化最大特點(diǎn)就是將接口和實(shí)現(xiàn)分離開來狸捕,將具體的功能塊隱藏在抽象的接口背后,以保證每個(gè)模塊可以在不影響其他模塊的情況下進(jìn)行改變众雷。這樣灸拍,可將模塊之間的依賴關(guān)系僅僅限定于接口。模塊化方法與層次化方法不同砾省,軟件模塊之間是相互獨(dú)立的關(guān)系鸡岗,而不是層次之間相互依賴的關(guān)系。
(3)對(duì)象化思想
就當(dāng)前的目的來說编兄,對(duì)象是結(jié)構(gòu)化使用模塊的方法轩性。面向?qū)ο笤O(shè)計(jì)方法將數(shù)據(jù)與數(shù)據(jù)上的操作封裝在對(duì)象這個(gè)模塊實(shí)體中,外界不能直接對(duì)對(duì)象內(nèi)部進(jìn)行訪問和操作狠鸳,只能通過消息的方式間接訪問揣苏。因此,面向?qū)ο笤O(shè)計(jì)方法能夠使軟件開發(fā)人員更加容易理解件舵,并且也提高了軟件的擴(kuò)展性 卸察、 維護(hù)性和重用性。
3 原理
嵌入式系統(tǒng)是一類特殊的計(jì)算機(jī)系統(tǒng)铅祸。它自底向上包括3個(gè)主要部分 : 硬件環(huán)境 蛾派、 嵌入式操作系統(tǒng)和嵌入式應(yīng)用程序。硬件環(huán)境是整個(gè)嵌入式操作系統(tǒng)和應(yīng)用程序運(yùn)行的硬件平臺(tái)个少,不同的應(yīng)用通常有不同的硬件環(huán)境 ; 因此如何有效地使嵌入式操作應(yīng)用于各種不同的應(yīng)用環(huán)境洪乍,是嵌入式操作系統(tǒng)發(fā)展中所必須解決的關(guān)鍵問題。
硬件抽象層通過硬件抽象層接口向操作系統(tǒng)以及應(yīng)用程序提供對(duì)硬件進(jìn)行抽象后的服務(wù)夜焦。當(dāng)操作系統(tǒng)或應(yīng)用程序使用硬件抽象層 API 進(jìn)行設(shè)計(jì)時(shí)壳澳,只要硬件抽象層 API 能夠在下層硬件平臺(tái)上實(shí)現(xiàn),那么操作系統(tǒng)和應(yīng)用程序的代碼就可以移植茫经。這樣巷波,原先嵌入式系統(tǒng)的3層結(jié)構(gòu)逐步演化為一種4層結(jié)構(gòu)萎津。下圖顯示了引入硬件抽象層后的嵌入式系統(tǒng)的結(jié)構(gòu)。
在整個(gè)嵌入式系統(tǒng)設(shè)計(jì)過程中抹镊,硬件抽象層同樣發(fā)揮著不可替代的作用锉屈。傳統(tǒng)的設(shè)計(jì)流程是采用瀑布式設(shè)計(jì)開發(fā)過程,首先是硬件平臺(tái)的制作和調(diào)試垮耳,而后是在已經(jīng)定型的硬件平臺(tái)的基礎(chǔ)上再進(jìn)行軟件設(shè)計(jì)颈渊。由于硬件和軟件的設(shè)計(jì)過程是串行的,因此需要很長的設(shè)計(jì)周期 ; 而硬件抽象層能夠使軟件設(shè)計(jì)在硬件設(shè)計(jì)結(jié)束前開始進(jìn)行终佛,使整個(gè)嵌入式系統(tǒng)的設(shè)計(jì)過程成為軟硬件設(shè)計(jì)并行的 V 模式開發(fā)過程俊嗽,如下圖所示。
這樣兩者的設(shè)計(jì)過程大致是同時(shí)進(jìn)行的或是并發(fā)的铃彰,縮短了整個(gè)設(shè)計(jì)周期绍豁。
4 特點(diǎn)
- 硬件抽象層與硬件密切相關(guān)性;
- 硬件抽象層與操作系統(tǒng)無關(guān)性牙捉;
- 硬件抽象層接口定義的功能應(yīng)包含硬件或系統(tǒng)所需硬件支持的所有功能竹揍;
- 硬件抽象層接口定義應(yīng)該簡單明了,如果定義太多接口邪铲,會(huì)增加軟件模擬的復(fù)雜性鬼佣;
- 具有可測性的接口設(shè)計(jì)有利于系統(tǒng)的軟硬件測試和集成。