第九章:
只要讲的是硬件抽象层HAL,HAL是建立在Linux驱动上的一套程序库。HAL不是Linux内核的一部分而是位于Android的系统运行库层。首先讲的是要加入HAL的好处。包括:统一硬件的调用借口、解决GPL版权问题、针对一些特殊的要求。HAL架构的基本原理是在Android系统中使用程序库调用位于内核空间的Linux驱动,然后Android应用程序可通过NDK程序访问HAL中的程序库,或直接在Android应用程序中访问HAL中的程序库。android HAL的源代码存储的位置并不固定,一般会存储在android源代码目录中等。最终编译成的.so文件主要放在Android系统的/system/lib/hw目录。
编写支持HAL的Linux驱动程序一般步骤为:第一步:编写linux驱动,在为Linux驱动添加HAL保护敏感数据时,Linux代码需要简洁将业务逻辑放到HAL Library中。第二步:编写HAL Library,它是普通的Linux Library文件,Service Library通过在接口中定义的ID定位HAL。第三步:编写Service Library。ServiceManager调用Service Library,APK程序调用ServiceManger类访问Service Library。在编写Linux驱动以及与驱动相关的程序过程中应分段测试每一部分程序。
编写HAL模块步骤和原理:第一步:定义结构体和宏,第二步:编写HAL模块open函数,第三步:定义hw_module_methods_t结构体变量,第四步:定义HAL_MODULE_INFO_SYM变量,第五步:编写HAL模块close函数,第六步:编写控制LED函数。