硬件抽象层:HAL
在Android系统中使用linux驱动有两种方式。一种就是通过传统的方式直接与linux驱动交互,另一种就是通过HAL模块。HAL模块本质上就是通过linux共享库与linux驱动交互,然后应用程序在访问linux共享库。
硬件抽象层HAL是建立在linux驱动之上的一套程序库。它并不属于linux内核,而是属于linux内核层之上的应用层。位于Android的系统运行库层。
AndroidHAL的源代码存储的位置并不固定,一般会存储在Android源代码目录/hardware目录中,其中Android源代码目录/hardware/libhardware_legacy目录用来存储臼HAL架构的源代码文件。新HAL架构的源代码在Android源代码目录/hardwarelibhardware目录中。当然也可以放在Android源代码目录/hardware或其他目录中。最终编译生成的.so文件主要放在Android系统的/system/lib/hw目录,同样可以放其他目录。
Android增加HAL的主要目的:统一硬件的调用接口;解决了GPL版权问题;针对一些特殊的要求;除了尽量避免应用程序直接访问linux驱动外,还有保护“私人财产”。
传统的linux驱动一般有两种类型的代码:访问硬件寄存器的代码和业务逻辑代码。
编写支持HAL的linux驱动的步骤:编写linux驱动;编写HAL Library;编写Service Library。
编写HAL模块的步骤:定义结构体和宏;编写HAL模块的open函数;定义hw_module_methods_t结构体变量;定义HAL_MODULES_INFO_SYM变量;编写HAL模块的close函数;编写控制LED的函数。
16:07:59
2016-07-03