为什么要在Android中加入HAL

 

为什么要在Android中加入HAL

        在传统的Linux系统中Linux驱动一般有两种类型:访问硬件寄存器的代码和业务逻辑代码。对于访问硬件寄存器的代码,并没有什么秘密可言。因为这都是调用的Linux内核的标准函数进行的标准操作。而Linux驱动的业务逻辑部分对于有些企业或个人并不像将源代码公开。尽管这些Linux驱动都是免费给用户使用的,但由于这些Linux驱动的实现涉及一些技术专利或商业机密,如果公开源代码会有很大的麻烦。但作为Linux驱动,又不得不公开源代码。这是由于Linux内核采用了GPL协议,而GPL协议要求所有使用基于GPL协议的源代码的程序必须开源。

        Goole为了满足这些不想开源的Linux驱动作者的要求,在Android层次结构中的系统运行层增加了一个HAL

Android HAL的架构

 

HAL 模块的存放路径和命名规则

    HAL模块(so文件)通常放在/system/lib/hw目录。

    HAL模块库文件的存放路径有两个:/system/lib/hw/vendor/lib/hwhw_get_module函数会先从/system/lib/hw目录根据库文件命名规则寻找库文件。如果/system/lib/hw目录未找到库文件,hw_get_module会按同样的规则在/vendor/lib/hw目录中寻找。

HAL模块库文件的命名规则是ID.suffix.so。其中ID通过hw_get_module函数的id参数指定。Suffix(后缀)通过属性文件指定。

 

 

http://www.cnblogs.com/cherry-blossom/

原文地址:https://www.cnblogs.com/cherry-blossom/p/5632761.html