第九章
Android系统中使用Linux驱动有两种方式,一种是通过传统的方式直接与Liunx驱动交互,另一种是Android特有的,就是通过HAL模块。HAL是建立在Linux驱动之上的一套程序库。而这套程序库并不属于Linux内核,而是属于Linux内核层之上的应用层。Linux驱动一般有两种类型的代码:访问硬件寄存器的代码和业务逻辑代码。Android加入HAL主要目的:统一硬件的调用接口、解决了GPL版权问题、还有就是针对一些特殊的要求。HAL架构的基本原理是Android系统中使用程序库调用位于内核空间的Linux驱动,Android应用程序中访问HAL中的程序库。AndroidHAL的源代码存储的位置并不固定,一般会存储在<Android源代码目录>/hardware目录中。编写一款支持HAL的Linux驱动程序的步骤:编写Linux驱动、编写HAL Library、编写Service Library。LED驱动在设备文件的read和write函数中读写指定的寄存器,基本原理是只从指定寄存器读取或写入5个字节。编写HAL模块的步骤和原理:定义结构体和宏、编写HAL模块的open函数、定义hw_module_methods_t、定义HAL_MODULE_INFO_SYM变量、编写HAL模块的close函数、编写控制LED的函数。HAL模块本质上就是通知Linux共享库与Linux驱动交互,然后应用程序再访问Linux共享库。