硬件抽象層:HAL

HAL硬件抽象層是創建在Linux驅動之上的一套程序庫。這套程序庫並不屬於Linux內核,而是屬於Linux內核層上的應用層。在傳統的Linux系統中Linux驅動通常有兩種類型的代碼。Google爲Android加入HAL主要有如下目的:統一硬件的調用接口。因爲HAL有標準的調用接口,因此能夠利用HAL屏蔽了Linux驅動複雜、不統一的接口;解決了GPL協議;針對一些特殊的要求。對於一些硬件,可能須要訪問一些用戶空間的資源,或在內核空間不方便完成的工做以及特殊需求。在這種狀況下,能夠利用位於空間的HAL代碼來輔助Linux完成一些工做。函數

本章實現的LED驅動包含了Linux驅動、HAL模塊、Service程序庫、NDK程序和Java程序。接口

編寫HAL模塊的步驟和原理以下:資源

  1. 定義結構體和宏;
  2. 編寫HAL模塊的open函數;
  3. 定義hw_module_methods_t結構體變量;
  4. 定義HAL_MODULE_INFO_SYM變量;
  5. 編寫HAL模塊的close函數;
  6. 編寫控制LED的函數;

支持HAL的Linux驅動程序步驟以下:   變量

1.編寫Linux驅動;module

2.編寫HAL Library;原理

3.編寫Service Library;硬件

HAL模塊本質上就是經過Linux共享庫(.so)與Linux驅動交互,而後應用程序再訪問Linux共享庫與Linux驅動交互,而後應用程序再訪問Linux共享庫。每個HAL共享庫指定一個ID,再利用這個ID配合必定的規則找到Linux共享庫。 程序