HAL硬件抽象層是創建在Linux驅動之上的一套程序庫。這套程序庫並不屬於Linux內核,而是屬於Linux內核層上的應用層。在傳統的Linux系統中Linux驅動通常有兩種類型的代碼。Google爲Android加入HAL主要有如下目的:統一硬件的調用接口。因爲HAL有標準的調用接口,因此能夠利用HAL屏蔽了Linux驅動複雜、不統一的接口;解決了GPL協議;針對一些特殊的要求。對於一些硬件,可能須要訪問一些用戶空間的資源,或在內核空間不方便完成的工做以及特殊需求。在這種狀況下,能夠利用位於空間的HAL代碼來輔助Linux完成一些工做。函數
本章實現的LED驅動包含了Linux驅動、HAL模塊、Service程序庫、NDK程序和Java程序。接口
編寫HAL模塊的步驟和原理以下:資源
支持HAL的Linux驅動程序步驟以下: 變量
1.編寫Linux驅動;module
2.編寫HAL Library;原理
3.編寫Service Library;硬件
HAL模塊本質上就是經過Linux共享庫(.so)與Linux驅動交互,而後應用程序再訪問Linux共享庫與Linux驅動交互,而後應用程序再訪問Linux共享庫。每個HAL共享庫指定一個ID,再利用這個ID配合必定的規則找到Linux共享庫。 程序