Android深度探索(卷1)HAL與驅動開發學習筆記(9)函數
第九章 硬件抽象層HAL學習
G o o g l e爲Android加入HAL主要有以下的目的:spa
一、統一硬件的調用接口blog
因爲H A L有標準的調用接口,因此能夠利用HAL屏蔽L i n u x驅動複雜、不統一的接口;接口
二、解決了G PL版權問題資源
因爲L i n u x內核基於GP L協議,而A n d r o i d基於A p a c h e Licence 2 . 0協議.所以G o o g l e玩了個「穿越」將本來位於L i n u x驅動中的敏感代碼向上移了一個層次,這樣這些敏感代碼就擺脫了G P L協議的束縛,。那些不想開源的L i n u x驅動做者也就不必開源了。開發
三、針對一些特殊的要求變量
對於有些硬件,可能須要訪問一些用戶空間的資源,或在內核空間不方便完成的工做以及特殊需求。在這種狀況下,能夠利用位於用戶空間的H A L代碼來輔助L i n u x驅動完成一些工做。原理
編寫支持HAL的Linux驅動的步驟硬件
1.編寫Linux驅動
2.編寫HAL library
3.編寫Service library
編寫HAL模塊的步驟和原理
1.定義結構體和宏
*描述HAL模塊的hw_moudle_t結構體
*描述HAL設備的hw_device_t結構體
*描述模塊入口函數的hw_moudle_motheoth_t結構體
2.編寫HAL模塊的open函數
3.定義hw_moudle_motheoth_t結構體變量
4.定義HAL_MOUDLE_INFO_SYM結構體變量
5.編寫HAL模塊的close函數
6.編寫控制函數