Android系统HAL层原理及编程注意事项

一,HAL层次结构

闲话不扯,直入主题,Android的HAL层其实不是一定要有的,只是为了系统的完整性,模块化,或者说是为了满足硬件厂商的保密需求,于是有了这个HAL层,HAL层起到承上启下的作用,承上就是指被JNI调用,启下就是指通过一般的系统调用open/read/write等访问硬件driver,那么先来看一个典型的android系统的层次关系:

APK  ( Activity/Service )                                                    ----第一层:Applications
  |
  | 
  |
XXXManager   [ 这个Manager不是必须的 ]                   ----第二层:Framework
  |  [对aidl和service的封装而已]
AIDL    ( *.aidl )                   
  |   [ IXXX.Stub.asInterface(ServiceManager.getService()) / Context.getSystemService() ]
service  ( XXXService.java )
  |   [ native method ]
  |
  |
jni   ( com_android_server_*.cpp )                               --- -第三层:Android Runtime/Dalvik 
   |  [ hw_get_module(*_HARDWARE_MODULE_ID) ,使用dlopen/dlsym加载HAL]
  | 
  |
HAL  ( *.default.so / *.ATM705.so )                                --- -第四层:HAL
  |  [ 通过系统调用 open/read/write/ioctl来访问驱动,从而达到操作硬件的目的 ]     
  |
  |  
kernel driver  ( *.so )                                                         --- -第五层:Linux Kernel
  

可以说,jni层,也就是虚拟机层,起到了承上启下的作用,非常重要。说啥呢,不是说HAL层吗,对,说HAL,可以说,没有HAL层,android系统照样可以搭建起来,直接通过系统调用访问驱动就好了。


二,HAL实现原理


HAL的实现原理有人总结为321条款,即3个结构体2个宏定义1个方法,的确很简单&

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值