HAL 硬體抽象層介紹
和你一起終身學習,這裡是程式設計師Android
本篇文章主要介紹 Android 開發中的部分知識點,通過閱讀本篇文章,您將收穫以下內容:
和你一起終身學習,這裡是程式設計師 Android
本篇文章主要介紹 Android
開發中的部分知識點,通過閱讀本篇文章,您將收穫以下內容:
一、HAL 概述
二、HAL 模組介紹
三、HAL 裝置介紹
四、構建HAL模組
一、HAL 概述
HAL定義了供硬體供應商實施的標準介面,該介面使Android無需考慮底層驅動程式的實現。使用HAL可使您實現功能而不會影響或修改更高階別的系統。本頁介紹了較舊的架構,該架構從Android 8.0開始不再受支援。對於Android 8.0及更高版本,請參見 HAL型別。圖 1. HAL 元件
您必須為產品提供的特定硬體實現相應的HAL(和驅動程式)。HAL實現通常內建於共享庫模組(.so檔案)中,但是由於Android並未強制HAL實現與裝置驅動程式之間進行標準互動,因此您可以根據自己的情況採取最佳措施。但是,為了使Android系統能夠與您的硬體正確互動,您必須遵守每個特定於硬體的HAL介面中定義的合同。
為了確保HAL具有可預測的結構,每個特定於硬體的HAL介面都具有在中定義的屬性 hardware/libhardware/include/hardware/hardware.h
。此介面允許Android系統以一致的方式載入正確的HAL模組版本。HAL介面包含兩個元件:模組和裝置。
二、HAL 模組介紹
模組代表打包的HAL實現,儲存為共享庫(.so file)。該 hardware/libhardware/include/hardware/hardware.h
標頭檔案定義一個結構(hw_module_t),其表示一個模組,幷包含後設資料,如版本,名稱,以及該模組的作者。Android使用此後設資料來正確查詢和載入HAL模組。
另外,該hw_module_t結構包含指向另一個結構的指標,該結構包含指向hw_module_methods_t模組的開啟函式的指標。此開放功能用於啟動與HAL用作其抽象的硬體的通訊。每個特定於硬體的HAL通常hw_module_t 使用該特定硬體的附加資訊來擴充套件通用結構。例如,在攝像機HAL中,該camera_module_t結構包含一個 hw_module_t結構以及其他攝像機特定的函式指標:
typedef struct camera_module {
hw_module_t common;
int(* get_number_of_cameras)(void);
int(* get_camera_info)(int camera_id,struct camera_info * info);
} camera_module_t;
實現HAL並建立模組struct時,必須將其命名為 HAL_MODULE_INFO_SYM
。Nexus 9音訊HAL中的示例:
struct audio_module HAL_MODULE_INFO_SYM = {
.common = {
.tag = HARDWARE_MODULE_TAG,
.module_api_version = AUDIO_MODULE_API_VERSION_0_1,
.hal_api_version = HARDWARE_HAL_API_VERSION,
.id = AUDIO_HARDWARE_MODULE_ID,
.name = "NVIDIA Tegra Audio HAL",
.author = "The Android Open Source Project",
.methods = &hal_module_methods,
},
};
三、HAL 裝置介紹
裝置會抽象您產品的硬體。例如,音訊模組可以包含主要音訊裝置,USB音訊裝置或Bluetooth A2DP音訊裝置。
裝置由該hw_device_t結構表示。類似於模組,每種型別的裝置都定義了泛型的詳細版本, hw_device_t其中包含針對硬體特定功能的功能指標。例如,audio_hw_device_t結構型別包含指向音訊裝置操作的函式指標:
struct audio_hw_device {
struct hw_device_t common;
/ **
*由音訊flinger用來列舉受支援的裝置
*每個audio_hw_device實現。
*
*返回值是audio_devices_t的1個或多個值的位掩碼
* /
uint32_t(* get_supported_devices)(const struct audio_hw_device * dev);
...
};
typedef struct audio_hw_device audio_hw_device_t;
除了這些標準屬性,每個特定於硬體的HAL介面都可以定義更多自己的功能和要求。有關詳細資訊,請參見HAL參考文件以及每個HAL的單獨說明。
四、構建HAL模組
HAL實現內建於模組(.so)檔案中,並在適當時由Android動態連結。您可以通過Android.mk為每個HAL實現建立檔案並指向原始檔來構建模組。通常,必須以特定格式命名共享庫,以便可以找到並正確載入它們。各個模組的命名方案略有不同,但遵循以下一般模式:<module_type>.<device_name>
。
友情推薦
至此,本篇已結束,如有不對的地方,歡迎您的建議與指正。同時期待您的關注,感謝您的閱讀,謝謝!
分享到朋友圈吧,方便您使用時快速查詢!
相關文章
- Android硬體抽象層(HAL)模組編寫規範Android抽象
- gfx-rs/hal跨平臺圖形抽象庫使用介紹抽象
- HDI硬體裝置介面介紹
- android HAL層程式碼Android
- 計算機(電腦)硬體組成基本介紹1計算機
- 計算機(電腦)硬體組成基本介紹3計算機
- 計算機(電腦)硬體組成基本介紹4計算機
- Rust圖形庫gfx-hal 逐幀渲染流程介紹Rust
- Flutter之Widget層級介紹Flutter
- AIGC底層技術介紹AIGC
- 以OpenGL/ES視角介紹gfx-hal(Vulkan) Framebuffer介面使用
- 以OpenGL/ES視角介紹gfx-hal(Vulkan) Texture介面使用
- 迅雷鏈基於智慧硬體的DPoA共識機制介紹
- 抽象層書單抽象
- 簡單介紹三層交換
- STM32 HAL 庫硬體 I2C 驅動 MPU6050
- 硬體開發筆記(十九):Altium Designer 21軟體介紹和安裝過程筆記
- Android Audio HAL 介面介紹之 adev_set_parameters()和out_set_parameters()Androiddev
- 伺服器內部主要幾種硬體以及它們的作用介紹伺服器
- OpenHarmony 3.1 Release版本特性解析——OpenHarmony硬體資源池化架構介紹架構
- Android Framework中的Application Framework層介紹AndroidFrameworkAPP
- BN(Batch Normalization)層的詳細介紹BATORM
- 模型預處理層介紹(1) - Discretization模型
- CSS的特性之層疊性介紹CSS
- Android HAL 層框架分析以及程式碼示例Android框架
- VSCode軟體介紹VSCode
- 領存工業級Z3 SAS固態硬碟硬體引數介紹硬碟
- Kubernetes 的層級名稱空間介紹
- FPGA內部硬體結構簡介FPGA
- web3 產品介紹:硬體錢包Ledger 離線管理私鑰更安全Web
- 記憶體回收介紹記憶體
- Altium designer軟體介紹
- CUDA記憶體介紹記憶體
- django中介軟體介紹Django
- 【Camera專題】Qcom-Camera驅動框架淺析(Hal層->Driver層)框架
- Django 2.0 模型層中 QuerySet 查詢操作介紹Django模型
- 接入層Nginx架構及模組介紹分享Nginx架構
- MySQL多層級結構-樹搜尋介紹MySql