系統(tǒng)架構(gòu)設(shè)計(jì)筆記(94)—— 硬件抽象層

硬件抽象層是位于操作系統(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)的軟硬件測試和集成。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末霜浴,一起剝皮案震驚了整個(gè)濱河市晶衷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌阴孟,老刑警劉巖晌纫,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異永丝,居然都是意外死亡锹漱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門慕嚷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哥牍,“玉大人,你說我怎么就攤上這事喝检⌒崂保” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵挠说,是天一觀的道長澡谭。 經(jīng)常有香客問我,道長损俭,這世上最難降的妖魔是什么蛙奖? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任潘酗,我火速辦了婚禮,結(jié)果婚禮上雁仲,老公的妹妹穿的比我還像新娘仔夺。我一直安慰自己,他們只是感情好攒砖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布缸兔。 她就那樣靜靜地躺著,像睡著了一般祭衩。 火紅的嫁衣襯著肌膚如雪灶体。 梳的紋絲不亂的頭發(fā)上阅签,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天掐暮,我揣著相機(jī)與錄音,去河邊找鬼政钟。 笑死路克,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的养交。 我是一名探鬼主播精算,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼碎连!你這毒婦竟也來了灰羽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤鱼辙,失蹤者是張志新(化名)和其女友劉穎廉嚼,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倒戏,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡怠噪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了杜跷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傍念。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖葛闷,靈堂內(nèi)的尸體忽然破棺而出憋槐,到底是詐尸還是另有隱情,我是刑警寧澤淑趾,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布秦陋,位于F島的核電站,受9級(jí)特大地震影響治笨,放射性物質(zhì)發(fā)生泄漏驳概。R本人自食惡果不足惜赤嚼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望顺又。 院中可真熱鬧更卒,春花似錦、人聲如沸稚照。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽果录。三九已至上枕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間弱恒,已是汗流浹背辨萍。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留返弹,地道東北人锈玉。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像义起,于是被迫代替她去往敵國和親拉背。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354