第九章

HAL ( Hardware Abstraction Layer,硬件抽象層)是創建在Linux驅動之上的一套程序庫。這套程序庫並不屬於Linux內核,而是屬於Linux內核層之上的應用層。android

在android中加入HAL的目的:架構

1.統一硬件的調用接口。因爲HAL有標準的調用接口,因此能夠利用HAL屏蔽Linux驅動 複雜、不統一的接口。函數

2.解決了GPL版權問題。因爲Linux內核基於GP協議,而Android基於Apache Licence 2 . 0協議。所以 Google 玩了個「穿越」將本來位於Linux驅動中的敏感代碼向上移了一個層次。這樣這些敏感代碼就擺脫了GPL協議的束縛,那些不想開源的Linux驅動做者也就不必開源了。接口

3. 針對一些特殊的要求。對於有些硬件,可能須要訪問一些用戶空間的資源,或在內核空間不方便完成的工做以及特殊需求。在這種狀況下,能夠利用位於用戶空間的HAL代碼來輔助Linux驅動完成一些工做。資源

編寫一款支持HAL的Linux驅動程序的步驟:io

第1步:編寫 Linux 驅動變量

「編寫 Linux 驅動」,從代表上看是廢話,但若是要爲 Linux 驅動添加 HAL,並且想盡可能保護敏感數據。Linux驅動的代碼就要儘可能簡潔,儘量將業務邏輯放到HAL Library中。module

第2步:編寫HAL Library硬件

第3步:編寫Service Library程序

新的HAL架構要求咱們這樣作。Service Library也是Linux Library。

編寫HAL模塊的步驟:第1步:定義結構體和宏;第2步:編寫HAL模塊的open函數;第3步:定義hw_module_methods_ t結構體變量;第4步: 定義HAL_MODULE_INFO_SYM 變量;第5步:編寫HAL模塊的close函數;第6步:編寫控制LED的函數

相關文章
相關標籤/搜索