Android深度探索(卷1)HAL与驱动开发学习笔记(9)
第九章 硬件抽象层HAL
G o o g l e为Android加入HAL主要有如下的目的:
1、统一硬件的调用接口
由于H A L有标准的调用接口,所以可以利用HAL屏蔽L i n u x驱动复杂、不统一的接口;
2、解决了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驱动作者也就没必要开源了。
3、针对一些特殊的要求
对于有些硬件,可能需要访问一些用户空间的资源,或在内核空间不方便完成的工作以及特殊需求。在这种情况下,可以利用位于用户空间的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.编写控制函数