国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

HAL是Hardware Abstraction Layer的首字母縮寫

發(fā)布時間:2009-12-14 22:04    發(fā)布者:linux_Ultra
關(guān)鍵詞: Abstraction , HAL , Hardware , layer , 縮寫
hal正是我們下一步要關(guān)心的,接下來我會分析HAL的實現(xiàn)原理。


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

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

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

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

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

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

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

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

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

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


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

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

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



說明:
1.
實線箭頭為主動調(diào)用,虛線箭頭為事件上報。


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


3.
udev
只是一個框架,它的行為完全受它的規(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ā)生時就調(diào)用函數(shù)hald_udev_data處理,它先從事件中取出主要參數(shù),創(chuàng)建一個hotplug_event對象,把它放入事件隊列中,然后調(diào)用hotplug_event_process_queue處理事件。


5.
函數(shù)hotplug_event_begin負責具體事件的處理,它把全部事件分為四類,并分別處理hotplug_event_begin_sysfs處理普通設(shè)備事件,hotplug_event_begin_acpi處理ACPI事件,hotplug_event_begin_apm處理APM事件,hotplug_event_begin_pmu處理PMU事件。要注意的是,后三者的事件源并非源于udev,而是在device_reprobe時觸發(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)建一個設(shè)備對象,設(shè)置設(shè)備的屬性,調(diào)用相關(guān)callouts,然后放入設(shè)備列表中,并觸發(fā)signaldbus通知相關(guān)應用程序。如果是拔除設(shè)備,則調(diào)用相關(guān)callouts,然后從設(shè)備列表中刪除,并觸發(fā)signaldbus通知相關(guān)應用程序。


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


8.
callout
HAL一種擴展方式,它在設(shè)備插入/拔除時執(zhí)行。可以在設(shè)備信息文件中(/usr/share/hal目錄)指定。


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


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

簡單的說,HAL就是一個設(shè)備數(shù)據(jù)庫,它管理當前系統(tǒng)中所有的設(shè)備,你可以以多種靈活的方式去查詢這些設(shè)備,可以獲取指定設(shè)備的特性,可以注冊設(shè)備變化事件。
本文地址:http://m.qingdxww.cn/thread-6532-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責;文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
geyingzhen 發(fā)表于 2009-12-15 15:39:05
頂!
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • FPGA設(shè)計流程培訓教程
  • Chiptorials——如何使用ATECC608 TrustFLEX實現(xiàn)公鑰輪換
  • 無線充電基礎(chǔ)知識及應用培訓教程
  • Chiptorials ——如何將CryptoAuthLib庫用于Microchip安全身份驗證IC
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产在线91精品入口 | 两个人免费观看完整版 | 日韩亚洲欧美在线 | 亚洲一区二区免费视频 | 国产精品中文字幕在线观看 | 国产日韩欧美视频在线观看 | 国内精品久久久久久久久久影视 | 99久久99久久精品免费看子 | 国产香蕉一区二区在线网站 | 国产高清在线精品免费 | 99久久精品一区二区三区 | 五月天色婷婷在线 | 中文字幕一区在线 | 伊人色综合久久天天网 | 99久热国产精品视频尤物不卡 | 婷婷激情综合网 | 久久三级网站 | 手机在线观看a | 99视频在线免费 | 国产精品中文字幕在线观看 | 久久91精品牛牛 | 国产91在线播放中文 | 国产三级精品三级在线专区91 | 日本免费黄网 | 国产一及毛片 | 天天干天天射综合网 | 国产精品国产三级国产专不∫ | 91在线视频免费 | 日本久久久久亚洲中字幕 | 福利久久| 日本一区二区三区在线观看 | 玖玖在线国产精品 | 日韩在线观看免费 | 国内精品久久久久久麻豆 | 九九热这里只有精品6 | 男女污污无遮挡免费观看 | 99免费观看视频 | 在线日本韩国 | 国产日韩精品一区二区在线观看 | 欧美色图第二页 | 日本高清视频网址 |