一,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个方法,的确很简单&