Android HAL的STUB的具体处理

最近有学习android的想法,并不是为了开发,

主要是为了项目管理上方便,想了解一下关于android studio,

写了一个简单的hollow world,理解了activity/service/broadcast receiver/content provider的概念。

同时大致料及了一下android的整体架构,毕竟自己也是做嵌入式的。

网上有比较清晰的资料如下:


这其中,HAL层感觉还是比较有意思,把他其中的STUB的大致的处理整理出来以便以后参照

代码的实现都是在

hardware/libhardware/include/hardware/hardware.h

hardware/libhardware/hardware.c


STUB的作用主要是让上层可以很自由的调用各个硬件的具体操作函数(这里也不是直接操作硬件)

具体的实现步骤

1:每一个操作硬件驱动(非驱动)的处理最终都编译成固定文件名(硬件类型命名的ID)的so文件,比如nfc.so

2:hardware.h中定义了hw_device_t->hw_module_t->hw_module_methods_t这三个结构体,我们需要在各个硬件的处理的so文件中重新跟他们赋值

3:hardware.c中的hw_get_module函数可以通过ID来获取hw_device_t,从而得到hw_device_t->hw_module_t->hw_module_methods_t->open的函数

 (获取hw_device_t的时候用到了dlsym,它可以得到so中的具体的变量的指针)

4:然后通过open函数获取各个.so中定义的hw_device_t结构体

  (注意这个结构体很可能被重写,从而实现各自不同的接口函数,而hw_get_module的调用方必须知道重写后的结构体)

5:接下来就可以调用hw_device_t的各个结构体中的回调函数来进行硬件的操作了(比如get/set)


虽然知道了HAL STUB了,具体从android的应用程序中如何调用这些HAL的接口呢?

难道是andorid APP -> JNI -> HAL Stub?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值