第九章硬件抽象层:HAL

第九章硬件抽象层:HAL

第九章主要介绍建立在Linux驱动之上的一套程序库HAL(硬件抽象层)。这套程序库不属于Linux内核,而是属于Linux内核层之上的应用层。

       Google为Android增加HAL的主要目的除了尽量避免应用程序直接访问Linux驱动外,还可以保护“私人财产”。对于那些既想发布基于Android的Linux驱动程序,又不想将核心逻辑公开的企业或个人,HAL就是福音。

第一节为什么要在Android中加入HAL

       对于不想开源的Linux驱动作者,Linux只相当于一个“数据二传”。也就是说在Linux驱动中不应该保留任何不想公开的业务逻辑代码(代码在HAL中),而只保留与寄存器交互的代码,访问寄存器只有Linux内核的相关函数能做到。如果这样安排,Linux驱动就只剩下一个空壳了,唯一的功能就是接收由HAL传过来的数据,并将这些数据写入指定的寄存器中,或从寄存器读取数据,并返回给HAL。从这一点来看,带HAL的Linux驱动就相当于将数据从HAL传到传感器,或从寄存器传到HAL的“数据二传”。

第二节Android HAL架构

      

HAL模块中的核心代码不变,只是添加了一些新的HAL架构要求的入口代码,使这些程序库可以自动被Android系统识别。而调用HAL模块的代码并不需要直接装载.so文件,而只需要通过一个ID来定位相应的.so文件(这里叫做Stub)。在Stub和JNI之间还有一层Service程序库,该层的库文件使用Android系统提供的调用HAL的机制访问HAL中的Service程序库。然后Android应用程序再调用Service程序库。

第三节为LED驱动增加HAL

       步骤:

              编写Linux驱动

              编写HAL Library

              编写Service Library

原文地址:https://www.cnblogs.com/maxgty/p/5653941.html