android硬件访问服务分析-vibrator

来源:互联网 发布:淘宝客服用的打字软件 编辑:程序博客网 时间:2024/05/21 19:42

源码:
Vibrator.java (frameworks\base\core\java\android\os)
VibratorService.java (frameworks\base\se rvices\core\java\com\android\server)
SystemServer.java (frameworks\base\services\java\com\android\server)
IVibratorService.aidl(frameworks\base\core\java\android\os)
ServiceManager.java (frameworks\base\core\java\android\os)
SystemVibrator.java(frameworks\base\core\java\android\os)
IVibratorService.java

jni层
Onload.cpp (frameworks\base\services\core\jni)
com_android_server_VibratorService.cpp (frameworks\base\services\core\jni)

hal层
hardware/libhardware/include/hardware/vibrator.c
hardware/libhardware/include/hardware/vibrator.h

JNI 向上提供本地函数, 向下加载HAL文件并调用HAL的函数
HAL 负责访问驱动程序执行硬件操作

SystemServer.java (frameworks\base\services\java\com\android\server)
加载onload.cpp
将VibratorService 添加到serviceManager进程中。
应用app在需要使用的时候。获取vibrator对象来操作振动器。
vibrator.java是抽象类,具体实现在SystemVibrator.java中。
VibratorService.java继承IVibratorService.stub
在此类中调用JNI中的本地方法。
com_android_server_VibratorService.cpp向上提供本地函数, 向下加载HAL文件并调用HAL的函数
中的注册JNI方法在onLoad.cpp中调用。

JNI 怎么使用 HAL
a. hw_get_module 获得一个hw_module_t结构体
b. 调用 module->methods->open(module, device_name, &device)
获得一个hw_device_t结构体
并且把hw_device_t结构体转换为设备自定义的结构体

HAL 怎么写
a. 实现一个名为HMI的hw_module_t结构体
b. 实现一个open函数, 它会根据name返回一个设备自定义的结构体
这个设备自定义的结构体的第1个成员是 hw_device_t结构体
还可以定义设备相关的成员
1、 SystemServer.java ( loadLibrary C library) onload.cpp
2、 JNI_Onload
a) com_android_server_SerialService.cpp
i. register_android_server_SerialService
ii. jniRegisterNativeMethods
b) com_android_server_VibratorService.cpp
i. register_android_server_VibratorService
ii. jniRegisterNativeMethods
c) com_android_server_VibratorService.cpp
i. register_android_server_LedService
ii. jniRegisterNativeMethods
1. hw_get_module
2. hal_led.c
a) led driver

3、 SystemServer.java addService service_manager.c
4、 Android app(java) getService service_manager.c
5、 Android app(java) VibratorService.java
a) com_android_server_VibratorService.cpp

0 0