第九章 linux
HAL是創建在linux驅動之上的一套不屬於linux內核的程序庫。它屬於linux內核層之上的應用層。HAL中存放了linux驅動中不該該保留的任何不想公開的業務邏輯代碼。因此HAL的目的是:統一硬件的調用接口、解決QPL版權問題、針對一些特殊要求。架構
Android HAL架構的發展:函數
一、在Android系統中使用程序庫(.so文件)調用位於內核空間的linux驅動。而後Android應用程序(APK文件)能夠經過NDK程序訪問HAL中的額程序庫,或直接在Android應用程序中訪問HAL中的程序庫。測試
二、在HAL模塊的核心代碼保持原狀,添加新的HAL架構要求的代碼入口。改代碼無需裝載.so文件,只須要經過一個ID來定位相應的.so文件。命令行
編寫一款支持HAL的linux驅動程序的步驟:接口
一、編寫linux驅動變量
二、編寫HAL Librarymodule
三、編寫Service Libraryfile
測試讀寫寄存器操做的命令行語法格式:硬件
Rwdev:命令行程序。
<r|w>:讀或寫命令,r表示讀取寄存器中的數據,w表示向寄存器寫入數據。
<dev_file>:設備文件名,例如/dev/s3c6410_leds_hal。
<byte_count>:寫入或讀取的字節數。
[byte1] [byte2] …[byten]:寫入的字節數。
編寫調用LED驅動的HAL模塊的步驟:
一、定義結構體和宏
二、編寫HAL模塊的open函數
三、定義hw_module_methods_t結構體變量
四、定義HAL_MODULE_INFO_SYM變量
五、編寫HAL模塊的close函數
六、編寫控制LED的函數