android+硬件服务,Android硬件服务访问流程

Android硬件服务访问流程

SystemService.java:(调库、启动服务)

1.System.loadLibbrary(“android_servers”);

libandroid_servers.so依赖jni文件夹下所有的com_android_server_xxx Service.cpp文件和onload.cpp文件。

System.loadLibbrary()函数会调用JNI_OnLoad()函数。JNI_OnLoad()函数在onload.cpp.

2.Slog.i(TAG,“xxx Service”)。

3.xxx = new xxxService(context)。

4.ServiceManager.addService(“xxx”,xxx)。

onload.cpp:(实现native方法、获得env、找类)

1.JNI_OnLoad(Java vm, void /* reserver /)*

获得env,vm->GetEnv((void**) &env, JNI_VERSION_1_4) 。

找类, JNI_OnLoad()函数调用一系列register_android_server_XXXService(env)函数,进行找类。

Com_android_server_XXXService.cpp:(为onload.cpp提供register_android_server_XXXService()

1.register_android_server_XXXService(env)函数进行找类。

jniRegisterNativeMethods(env, “com/android/server/xxxService”,method_table, NELEM(method_table))

2.JNINativeMethod methods[],自定义native修饰的 java_ioctl函数对应的 c_ioctl方法。

com/android/server/xxxService.java:

1.实现xxxService类。

native static int java_ioctl(int which,int status)。声明native方法。

实现IHelloService.aidl生成IHelloService.java的生成binder机制的接口led_ioctl。

hal.c:(硬件抽象层)

1.自定义一个led_device_t结构体。

第一个成员为struct hw_device_t comm结构体实例。

2.定义一个struct led_device_t led_device实例。

填充.hal_ioctl = led_hal_ioctl。

3.int led_open(const struct hw_module_t module,const char id,struct hw_device_t** device)。**

4.struct hw_module_methods_t method。

5.struct hw_module_t HMI。

led_driver.c:(内核层驱动)

1.static struct file_operations fops。

2.static void __init。

3.static void __exit。

IHelloService.aidl:

1.package android.os。

2.interface xxxService。

int led_ioctl(int which,int status)。

3.在androidM/frameworks/base/Android.mk加一行

core/java/android/os/IHelloService.aidl \

IHelloService.java:

1.由aidl生成IHelloService.java。

2.生成binder机制的接口。

public int led_ioctl(int which ,int status) throws android.os.RemoteException。

APP:

1.ServiceManager.getservice()。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值