HAL层作为纽带,把Framework层的APIs和底层驱动连接起来。简言之,上层需要什么操作接口,HAL层就负责实现之。
HAL在整个Camera框架中的位置如下图红框:
Android Camera框架及Camera服务HAL(红框)
HAL层的代码编译为so库,通常位于/system/lib/hw/或/vender/lib/hw/目录下。接下来看下so库的加载实现。
广而知之,C/C++的入口为main()函数,Android应用的入口是主Activity的onCreate(),那so库的入口呢?就是:
int hw_get_module(const char *id, const struct hw_module_t **module)
参数id:模块的名称,HAL的so库命名规则:xxx.yyy.so,所以这里的id就是"xxx"。之所以这么定是和so的查找规则对应的,稍后详述。
参数module:通过她获取指向实际模块