mtk平台hw_get_module分析
google为了保护硬件厂商的信息,在android中添加了一层HAL层。查看HAL的编写方法的过程中,发现整个模块没有一个入口。一般应用程序有main函数,可以让加载器进行加载执行,而对于动态链接库,我们可以对库中导出的任何符号进行调用。 android中的HAL需要上层的函数对其进行加载调用,android的HAL加载器是如何实现对不同的Hardware Module进行通用性的调用的呢? 查看源码的过程中发现android中实现调用HAL是通过hw_get_module实现的。 int hw_get_module(const char *id, const struct hw_module_t **module) { return hw_get_module_by_class(id, NULL, module); } 这是其函数原型,id会指定Hardware的id,这是一个字符串,比如我们比较熟悉的sensor的id是#define SENSORS_HARDWARE_MODULE_ID "sensors",如果找到了对应的hw_module_t结构体,会将其指针放入*module中。看看它的实现。 int hw_get_module_by_class(const char *class_id, const char *inst, const struct hw_module