分类: Android平台
2013-02-21 11:06:15
经过几天的学习,暂时的理解是 :从app到驱动的一般流程大致应该为:
app
\
framework (java app的framework,虽然该实现在/frameworks下面但是并不是这个frameworks目录)
\
JNI (一般是cpp文件貌似以libXXX_runtime.so的形式出现,这部分的实现文件一般在frameworks目录的jni下面,具体在哪个jni下面不一定,比如camera,sensor,audio在frameworks/base/jni下 ;lights ,battery ,vibrator 等的service的jni在 base/services/jni下面 这个地方应该是有client和service之分)
\
libhardware.so (该文件由 hardware/libhardware/hardware.c 和 hardware/libhardware/include/hardware/hardware.h编译,是通用的hal层接口)
\
xxx.xxx.so(具体的硬件模块,基本上一般存在于hardware/libhardware/module目录下,头文件在 libhardware/include下,如果是平台相关的,那么就要去vendor或者是device下去找了)
\
驱动 (kernel下的driver)
看了几篇文章,说是java本身不具备权限调用hal层的.so文件,所以要通过runtime.so ,可以参考网上led hal那个例子,runtime调到通用的hardware(hal)接口,这个。so里面有 hw_get_module,通过这个函数找到并加载 xxx.xxx.so。
暂时这么理解这个流程,随着深入的理解再修改。