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.编写控制函数