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

本文深入探讨了Android系统硬件抽象层(HAL)的实现原理,强调了JNI层的重要性。HAL主要通过dlopen/dlsym进行硬件接口映射。文章指出,HAL编程时,自定义结构体必须以hw_module_t或hw_device_t为首个成员,以确保兼容性。通过实例展示了强制类型转换在HAL层中的应用,并验证了结构体成员顺序对于正确通信的关键作用。
摘要由CSDN通过智能技术生成
一,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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值