一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

HAL 工作原理...

 jijo 2008-12-26
HAL 工作原理

HALHardware Abstraction Layer的首字母縮寫。我最早是在Winnt 3.5的幫助中知道這個(gè)名詞的,對(duì)幫助文檔中的說法我比較認(rèn)同,所以一直對(duì)它抱有好感。不過Windows下的HALLinux下的HAL兩者所指并非相同之物:

 

Windows下的HAL位于操作系統(tǒng)的最底層,直接操作物理硬件,隔離與硬件相關(guān)的信息,為上層的操作系統(tǒng)和設(shè)備驅(qū)動(dòng)程序提供一個(gè)統(tǒng)一的接口,起到對(duì)硬件的抽象作用。有了HAL,編寫驅(qū)動(dòng)程序就容易多了,因?yàn)?/span>HAL的接口不但使用簡(jiǎn)單,而且具有更好的可移植性(沒用過)。

 

Linux 下的HAL:至于對(duì)硬件的抽象,Linux內(nèi)核早就有類似機(jī)制,只不過沒有專門的名稱罷了。而LinuxHAL指的并非這個(gè),它不是位于操作系統(tǒng)的最底層,直接操作硬件,相反,它位于操作系統(tǒng)和驅(qū)動(dòng)程序之上,是一個(gè)運(yùn)行在用戶空間中服務(wù)程序。

 

我們知道,Linux和所有的Unix一樣,習(xí)慣用文件來抽象設(shè)備,任何設(shè)備都是一個(gè)文件,比如/dev/mouse是鼠標(biāo)的設(shè)備文件。這種方法看起來不錯(cuò),每個(gè)設(shè)備都有統(tǒng)一的形式,但使用并不那么容易,設(shè)備文件名沒有什么規(guī)范,從簡(jiǎn)單的一個(gè)文件名,你無法得知它是什么設(shè)備,具有有什么特性。

 

結(jié)果形成這樣的尷尬:有了設(shè)備和設(shè)備驅(qū)動(dòng)程序,卻不知道如何使用它。這些亂七八糟的設(shè)備文件,讓設(shè)備的管理和應(yīng)用程序的開發(fā)都變得很麻煩,所以有必要提供一個(gè)硬件抽象層,來為上層應(yīng)用程序提供一個(gè)統(tǒng)一的接口,LinuxHAL就這樣應(yīng)運(yùn)而生了。

 

HAL并不提供諸如拍照和刻錄等之類的功能,相反它只是告訴應(yīng)用程序,系統(tǒng)中有哪些設(shè)備可用,以及這些設(shè)備的類型、特性和能力等。主要說來,它提供以下幾項(xiàng)功能:

1.         獲取指定類型的設(shè)備列表。

2.         獲取/更改設(shè)備的屬性值。

3.         獲取設(shè)備具有的能力描述。

4.         設(shè)備插入/拔除時(shí),通知相關(guān)應(yīng)用程序。

5.         設(shè)備屬性或能力變化時(shí),通知相關(guān)應(yīng)用程序。

 

udev創(chuàng)建dev下的文件結(jié)點(diǎn),加載驅(qū)動(dòng)程序,讓設(shè)備處于可用狀態(tài)。而HAL則告訴應(yīng)用程序,現(xiàn)在有哪些設(shè)備可用,這些設(shè)備的類型、特性和能力,讓應(yīng)用程序知道如何使用它們。

 

設(shè)備的屬性管理是HAL最重要任務(wù)之一,有的設(shè)備屬性來源于實(shí)際的硬件,有的來源于設(shè)備信息文件(/usr/share/hal/fdi/),有的來源其它配置信息(/usr/share/hwdata/)。設(shè)備屬性的都有標(biāo)準(zhǔn)的定義,這些屬性定義是HALSPEC的主要內(nèi)容之一,可以參考http://people./~david/hal-spec/hal-spec.html

 

HAL作為一個(gè)后臺(tái)服務(wù)程序運(yùn)行,它的主體架構(gòu)基于MVC的模型,在DBUS的幫助下,實(shí)現(xiàn)了異步事件通知機(jī)制。HAL的分層視圖如下:

 

說明:

1.         實(shí)線箭頭為主動(dòng)調(diào)用,虛線箭頭為事件上報(bào)。

 

2.         udev通過NetLink注冊(cè)內(nèi)核的設(shè)備事件,當(dāng)有設(shè)備插入/拔除時(shí),udev就會(huì)收到通知,它會(huì)從事件中所帶參數(shù)和sysfs中的信息,加載適當(dāng)?shù)尿?qū)動(dòng)程序,創(chuàng)建dev下的結(jié)點(diǎn),讓設(shè)備處于可用的狀態(tài)。

 

3.         udev只是一個(gè)框架,它的行為完全受它的規(guī)則所控制,這些規(guī)則存放在目錄/etc/udev/rules.d/中,其中90-hal.rules是用來讓udev把設(shè)備插入/拔除的事件通過socket socket:/org/freedesktop/hal/udev_event轉(zhuǎn)發(fā)給HAL的。

 

4.         HAL掛在socket:/org/freedesktop/hal/udev_event上等待事件,有事件發(fā)生時(shí)就調(diào)用函數(shù)hald_udev_data處理,它先從事件中取出主要參數(shù),創(chuàng)建一個(gè)hotplug_event對(duì)象,把它放入事件隊(duì)列中,然后調(diào)用hotplug_event_process_queue處理事件。

 

5.         函數(shù)hotplug_event_begin負(fù)責(zé)具體事件的處理,它把全部事件分為四類,并分別處理hotplug_event_begin_sysfs處理普通設(shè)備事件,hotplug_event_begin_acpi處理ACPI事件,hotplug_event_begin_apm處理APM事件,hotplug_event_begin_pmu處理PMU事件。要注意的是,后三者的事件源并非源于udev,而是在device_reprobe時(shí)觸發(fā)的(osspec_device_reprobe/hotplug_reprobe_tree/hotplug_reprobe_generate_add_events/acpi_generate_add_hotplug_event)。

 

6.         函數(shù)hotplug_event_begin_sysfs中,如果是插入設(shè)備,則創(chuàng)建一個(gè)設(shè)備對(duì)象,設(shè)置設(shè)備的屬性,調(diào)用相關(guān)callouts,然后放入設(shè)備列表中,并觸發(fā)signaldbus通知相關(guān)應(yīng)用程序。如果是拔除設(shè)備,則調(diào)用相關(guān)callouts,然后從設(shè)備列表中刪除,并觸發(fā)signaldbus通知相關(guān)應(yīng)用程序。

 

7.         應(yīng)用程序可以主動(dòng)調(diào)用HAL提供的DBUS接口函數(shù),這些函數(shù)在libhal.h中有定義。應(yīng)用程序也可以注冊(cè)HALsignal,當(dāng)設(shè)備變化時(shí),HAL通過DBUS上報(bào)事件給應(yīng)用程序。

 

8.         calloutHAL一種擴(kuò)展方式,它在設(shè)備插入/拔除時(shí)執(zhí)行??梢栽谠O(shè)備信息文件中(/usr/share/hal目錄)指定。

 

9.         addon也是HAL一種擴(kuò)展方式,它與callout的不同之處在于addon往往是事件的觸發(fā)者,而不是事件的消費(fèi)者。HAL的事件源主要源于udev,而udev源于kernelhotplug,然而有的設(shè)備如電源設(shè)備、磁盤設(shè)備和特殊按鍵等,它們并不產(chǎn)生hotplug事件。HAL就得不到通知,怎么辦呢,addon就是用于支持新事件源的擴(kuò)展方式。比如addon-acpi/proc/acpi/event或者/var/run/acpid.socket收到事件,然后轉(zhuǎn)發(fā)成HAL事件。addon-storage檢測(cè)光盤或磁盤的狀態(tài),并設(shè)置設(shè)備的屬性。addon-keyboard檢測(cè)一些特殊按鍵,并觸發(fā)相應(yīng)事件。

 

access-check/ci-tracker/ck-tracker負(fù)責(zé)權(quán)限的檢查,里面提到的PolicyKit/ConsoleKit不是太熟悉,有時(shí)間再看看。

 

簡(jiǎn)單的說,HAL就是一個(gè)設(shè)備數(shù)據(jù)庫(kù),它管理當(dāng)前系統(tǒng)中所有的設(shè)備,你可以以多種靈活的方式去查詢這些設(shè)備,可以獲取指定設(shè)備的特性,可以注冊(cè)設(shè)備變化事件。

 

~~end~~

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产精品十八禁亚洲黄污免费观看 | 精品亚洲香蕉久久综合网| 国产在线日韩精品欧美| 在线观看视频国产你懂的| 成人免费观看视频免费| 99久久国产精品亚洲| 人妻乱近亲奸中文字幕| 在线免费国产一区二区三区| 人体偷拍一区二区三区| 亚洲国产色婷婷久久精品| 亚洲中文在线中文字幕91| 精品人妻一区二区三区免费| 精品一区二区三区乱码中文| 国产成人精品国内自产拍| 99精品人妻少妇一区二区人人妻 | 欧美日韩综合在线精品| 日韩日韩欧美国产精品| 午夜精品黄片在线播放| 熟女中文字幕一区二区三区| 国产精品流白浆无遮挡| 在线观看日韩欧美综合黄片| 国产精品香蕉在线的人| 99久久人妻中文字幕| 精品视频一区二区三区不卡| 国内女人精品一区二区三区| 亚洲视频一区二区久久久| 欧美一本在线免费观看| 亚洲国产精品一区二区| 一区二区三区人妻在线| 国产户外勾引精品露出一区| 日本熟妇五十一区二区三区| 亚洲中文字幕视频在线观看| 午夜精品久久久免费视频| 加勒比东京热拍拍一区二区| 日本在线视频播放91| 亚洲一区二区三区中文久久| 国产不卡一区二区四区| 人妻露脸一区二区三区| 亚洲最新的黄色录像在线| 伊人国产精选免费观看在线视频 | 久久精品久久精品中文字幕|