最近有学习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?

更多相关文章

  1. C语言函数的递归(上)
  2. 学习Android从0开始之开发工具篇-Android(安卓)studio详解
  3. 【Android(安卓)Audio】Android(安卓)Audio System 之一:AudioTra
  4. linux和android端的pthread学习
  5. android Fragment学习
  6. Android应用进程分裂分析
  7. Android(安卓)屏幕绘制机制及硬件加速
  8. Android(安卓)Junit单元测试
  9. Android(安卓)Binder Mechanism (2) -- 如何获得ServiceManager

随机推荐

  1. Android(安卓)开发资料总结--网络请求框
  2. Adapter软件设计模式在Android的应用
  3. [RK3399][Android7.1] 调试笔记 --- 设置
  4. Android 按键处理(驱动层到上层)架构
  5. Android Framework AIDL的使用
  6. Android(安卓)UI开发第二十一篇――下拉
  7. Android(安卓)PopupWindow 实现自定义弹
  8. android EditText 对输入字数和内容范围
  9. 推送sdk (类似百度 推送 ) android mina (
  10. android屏幕刷新显示机制