HAL接口层 --- hardware模块接口

下面分析一个文件hardware/libhardware/hardware.c,这个文件提供了一些函数,上层通过这些函数可以用来查找加载HAL库,

以及获取指定HAL库的模块变量;

load方法如下,

static int load(const char *id, const char *path,const struct hw_module_t **pHmi)
{
int status;
void *handle;
struct hw_module_t *hmi;
handle = dlopen(path, RTLD_NOW);
•••

这个接口是一个内部函数,逻辑如下:

1,首先先加载path指定的HAL动态库

2,然后通过下面的代码

const char *sym = HAL_MODULE_INFO_SYM_AS_STR;
hmi = (struct hw_module_t *)dlsym(handle, sym);

从动态库中获取模块名为HMI的模块,  在hardware/libhardware/include/hardware.h中有如下宏定义:

#define HAL_MODULE_INFO_SYM HMI
#define HAL_MODULE_INFO_SYM_AS_STR "HMI"

因此HAL模块变量必须定义成HAL_MODULE_INFO_SYM才能被正确获取;

3, 检测模块id是否匹配,匹配才能成功获取到模块变量

hw_module_exists方法如下,

static int hw_module_exists(char *path,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值