歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux守護進程HALD

Linux守護進程HALD

日期:2017/2/28 16:24:51   编辑:Linux教程

hal(hardware abstract lever)硬件抽象。 但是Linux的hal運行於用戶空間作為一個daemon進程。監聽一個socket接口。等待udev發來的通知。 udev為設備加載驅動,設備可用後,往往有udev的規則,讓udev通知hald表示設備變動了。 hal作為一個硬件的數據庫,記錄了硬件的屬性,當前硬件有哪些,他們的屬性是什麼,等等信息。 因而,用戶態程序可以查詢hald得到硬件的信息。也可以注冊監聽事件在hald上面。當監聽的硬件事件發生時候,hald會通知他們。

-----------摘錄-----------

下面是hal在系統中的位置:

說明:

1.實線箭頭為主動調用,虛線箭頭為事件上報。

2.udev通過NetLink注冊內核的設備事件,當有設備插入/拔除時,udev就會收到通知,它會從事件中所帶參數和sysfs中的信息,加載適當的驅動程序,創建dev下的結點,讓設備處於可用的狀態。

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

4.HAL掛在socket:/org/freedesktop/hal/udev_event上等待事件,有事件發生時就調用函數hald_udev_data處理,它先從事件中取出主要參數,創建一個hotplug_event對象,把它放入事件隊列中,然後調用hotplug_event_process_queue處理事件。

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

6.函數hotplug_event_begin_sysfs中,如果是插入設備,則創建一個設備對象,設置設備的屬性,調用相關callouts,然後放入設備列表中,並觸發signal讓dbus通知相關應用程序。如果是拔除設備,則調用相關callouts,然後從設備列表中刪除,並觸發signal讓dbus通知相關應用程序。

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

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

9.addon也是HAL一種擴展方式,它與callout的不同之處在於addon往往是事件的觸發者,而不是事件的消費者。HAL的事件源主要源於udev,而udev源於kernel的hotplug,然而有的設備如電源設備、磁盤設備和特殊按鍵等,它們並不產生hotplug事件。HAL就得不到通知,怎麼辦呢,addon就是用於支持新事件源的擴展方式。比如addon-acpi從/proc/acpi/event或者/var/run/acpid.socket收到事件,然後轉發成HAL事件。addon-storage檢測光盤或磁盤的狀態,並設置設備的屬性。addon-keyboard檢測一些特殊按鍵,並觸發相應事件。

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

簡單的說,HAL就是一個設備數據庫,它管理當前系統中所有的設備,你可以以多種靈活的方式去查詢這些設備,可以獲取指定設備的特性,可以注冊設備變化事件。

Hal的功能:

1. 獲取指定類型的設備列表。

2. 獲取/更改設備的屬性值。

3. 獲取設備具有的能力描述。

4. 設備插入/拔除時,通知相關應用程序。

5. 設備屬性或能力變化時,通知相關應用程序。

Copyright © Linux教程網 All Rights Reserved