什麼是硬體抽象層

  愛學習的小夥伴們,你們知道嗎?不知道的話跟著小編一起來學習瞭解。

  硬體抽象層介紹

  ***Hardware Abstraction Layer ***

  硬體抽象層是位於作業系統核心與硬體電路之間的介面層,其目的在於將硬體抽象化。它隱藏了特定平臺的硬體介面細節,為作業系統提供虛擬硬體平臺,使其具有硬體無關性,可在多種平臺上進行移植。 從軟硬體測試的角度來看,軟硬體的測試工作都可分別基於硬體抽象層來完成,使得軟硬體測試工作的並行進行成為可能。

  硬體抽象層大概分為以下幾點HAL:

  *上層軟體

  *虛擬驅動,設定管理模組

  *內部通訊SERVER

  *內部乙太網

  *內部通訊CLIENT

  *使用者接***

  硬體抽象層介面的定義和程式碼的設計具有一下特點:

  *硬體抽象層具有與硬體的密切相關性

  *硬體抽象層具有與作業系統無關性

  *介面定義的功能應包含硬體或系統所需硬體支援的所有功能

  *介面定義簡單明瞭,太多介面函式會增加軟體模擬的複雜性

  *具有可測性的介面設計有利於系統的軟硬體測試和整合

  硬體抽象層對使用者裝置介面的功能模擬主要由虛擬驅動模組完成,包括資料包的收發及協議報文的預處理等工作,為上層協議軟體提供標準的API函式, 而對使用者裝置的介面管理則由上層網路管理軟體通地裝置管理模組對其進行管理配置及監控,內部通訊模組運行於內部隊乙太網絡,協調各模組之間的功能介面,保證從處理單元與主處理單元之間實時可靠的資料傳輸.

  speically in Android

  Framework&Application

  ------------------------------------

  External lib&Runtime

  ------------------------------------

  HAL

  Sensor stub stub stub

  ------------------------------------

  Linux Device Driver

  ------------------------------------

  圖上是現在Android HAL 的所在位置,從這張架構圖我們知道,HAL 的目的是為了把 Android framework 與 Linux kernel 完整隔開。讓 Android 不至過度依賴 Linux kernel,有點像是kernel independent的意思,讓 Android framework 的開發能在不考慮驅動程式的前提下進行發展。

  HAL module架構

  struct hw_module_t;

  struct hw_module_methods_t;

  struct hw_device_t;

  hw_module_methods_t

  ---------------------------

  open******

  \

  \

  \

  hw_module_t

  ----------------

  

  , , , , ,

  \

  \

  \

  \

  hw_device_t

  ---------------

  close******

  HAL 使用方法

  舉Sensor為列子

  ***1***Native code通過hw_get_module呼叫獲取HAL stub:

  hw_get_module ***SENSOR_HARDWARE_MODULE_ID, ***const hw_module_t*****&module***

  ***2***通過繼承hw_module_methods_t的callback來open裝置:

  module->methods->open***module,

  SENSOR_HARDWARE_MODULE_ID, ***struct hw_device_t*****device***;

  ***3***通過繼承 hw_device_t的callback來控制裝置:

  sSensorDevice->set_on***sSensorDevice, sensor***;

  sSensorDevice->set_off***sSensorDevice, sensor***;