第9章 硬體抽象層 HAL

2022-09-11 02:00:10 字數 1301 閱讀 9943

撇開這些爭論,學習android硬體抽象層,對理解整個android整個系統,都是極其有用的,因為它從下到上涉及到了android系統的硬體驅動層、硬體抽象層、執行時庫和應用程式框架層等等,下面這個圖闡述了硬體抽象層在android系統中的位置,以及它和其它層的關係:

android加入hal主要有如下的目的:

1.統一硬體的呼叫介面。由於hal 有標準的呼叫介面,所以可以利用hal:遮蔽linux 驅動

複雜、不統一的介面。

2.解決了gpl版權問題。由於linux 核心基於gpl協議,而android 基於apache licence 2.0 協議.因此google 玩了個「穿越「。將原本位於linux驅動中的敏感**向上移了乙個層次。這樣這些敏感**就擺脫了gpl 協議的束縛, 那些不想開源的linux驅動作者也就沒必要開源了。

3.針對一些特殊的要求。對於有些硬體,可能需要訪問一些使用者空間的資源,或在核心空間不方便完成的工作以及特殊需求。在這種情況下,可以利用位於使用者空間的hal **來輔助linux驅動完成一些工作。

編寫一款支援hal 的linux 驅動程式的步驟

第1 步:編寫linux 驅動

第2 步:編寫hal library

第3 步:編寫service library

編寫hal 模組的步驟和原理

第1步:定義結構體和巨集

編寫hal 模組需要使用到3 個非常重要的結構體( hw_module_t 、hw_device_t 和hw _ module_ methods_t ), 在第1步需要定義兩個新的結構體, 這兩個結構體的第1個變數的資料型別必須是hw_module_t 和hw_device_t。除此之外, 還需要為hal 模組定義乙個id。

第2步:編寫hal 模組的open函式

open 函式是hal 模組的入口點。

第3步:定義hw_module_methods_ t 結構體變數

hal 模組需要hw_module_methods_t 結構體的open 函式指標交量指定open 入口函式。

第4步: 定義hal_module_info_sym 變數

所有的hal 模組都必須有乙個hal_module_info_sym 變數。

第5步:編寫hal 模組的close 函式

當hal 模組被解除安裝後會呼叫close 函式。

第6步:編寫控制led 的函式

根據裝置型別和功能的不同,這一步編寫的函式也有所不同。

硬體抽象層 HAL

本章主要講硬體抽象層 hal硬體抽象層是建立在linux驅動之上的一套程式庫。這套程式庫並不屬於linux核心,而是屬於linux核心層上的應用層。google為android加入hal主要有以下目的 統一硬體的呼叫介面。由於hal有標準的呼叫介面,所以可以利用hal遮蔽了linux驅動複雜 不統一...

Android 硬體抽象層(HAL)

出發點 保護廠商利益 android的硬體抽象層,簡單來說,就是 對linux核心驅動程式的封裝,向上提供介面,遮蔽低層的實現細節。也就是說,把對硬體的支援分成了兩層,一層放在使用者空間 user space 一層放在核心空間 kernel space 其中,硬體抽象層執行在使用者空間,而linux...

什麼是HAL 硬體抽象層

hal hardware abstraction layer 硬體抽象層 這個是李先靜的blog的解釋,真是天下何處不逢君啊 hal是hardware abstraction layer的首字母縮寫。我最早是在winnt 3.5的幫助中知道這個名詞的,對幫助文件中的說法我比較認同,所以一直對它抱有好...