HAL ( Hardware Abstraction Layer,硬件抽象層 )是創建在Linux 驅動之上的一套程序庫。這套程序庫並不屬於Linux 內核, 而是屬於Linux 內核層之上的應用層。架構
統一硬件的調用接口。因爲HAL 有標準的調用接口,因此能夠利用HAL屏蔽Linux 驅動複雜、不統一的接口。解決了GPL版權問題。因爲Linux 內核基於GPL協議,而Android 基於Apache Licence 2 .0 協議。所以Google 玩了個「穿越」,將本來位於Linux驅動中的敏感代碼向上移了一個層次這樣這些敏感代碼就擺脫了GPL 協議的束縛。那些不想開源的Linux驅動做者也就不必開源了。接口
針對一些特殊的要求。對於有些硬件,可能須要訪問一些用戶空間的資源,或在內核空間不方便完成的工做以及特殊需求。在這種狀況下,能夠利用位於用戶空間的HAL 代碼來輔助Linux驅動完成一些工做。HAL架構比較簡單,其基本原理就是在Android 系統中使用程序庫(.so文件)調用位於內核空間的Linux 驅動(通常經過設備文件訪問)。而後溝Android 面用程序(APK 文件)能夠經過NDK程序訪問HAL中的程序,或直接在Android 應用程序中訪問HAL中的程序庫(直接使用Java代碼訪問)資源
編寫支持HAL 的Linux 驅動程序的步驟;第1 步: 編寫Linux 驅動;第2 步:編寫HAL Library;第3 步:編寫Service Libraryio
在Android.系統中使用Linux 驅動有兩種方式。一種就是經過傳統的方式直接與Lmux 驅動交互。另一種是Android特有的,就是經過HAL 模塊。HAL 模原理
塊本質上就是經過Linux 共享庫(.so)與Linux驅動交互,而後應用程序再訪問Linux共享庫。硬件