Android应用层调用驱动的全过程 精简版
来源:互联网 发布:网站数据库下载 编辑:程序博客网 时间:2024/06/05 17:00
上一篇写了很详细的一篇应用层调用驱动的全流程。本着把书读薄的精神,我决定写个简版。
app层:Activity与Service的关系
首先是activiy中调用了service去执行底层操作,这个service实现了根据aidl接口文件自动创建的java接口文件IService,这样说还不准确,Service对象是实现了IService的代理子接口Stub。所以,activity是通过IService.Stub.asInterface这样的方式获得Service实例的。
framework层:
1.主要问题是怎么实现Java到C的转化。这个转化其实是两个文件实现的,一个是Service,它负责调用并封装JNI接口。一个是JNI接口,它负责调用并封装HAL的函数。
2.Service是java文件,怎么调用C呢?其实JNI文件注册了一个native method_tables[]。有所有的JNI函数。然后,Service这个Java文件只需要调用JNI注册表里的函数就行了。实际上是怎么做的呢?在Service里声明native函数就行了。
private static native boolean init_native();
这一步很关键,不然java层是找不到C层的函数指针的。
HAL层:
上面提过JNI会调用并封装HAL层的函数了。那HAL层又做了什么工作?那就是读取文件节点。HAL层提供了所有的setVal,getVal,open,close等各种自定义的函数供上层调用,所有函数的实现都是通过fctl.h提供的文件操作read/write/open/close来从文件节点获取驱动提供的数据的。
补充下:该层有个巧妙的设计,就是把通用的接口如:hw_device_t和hw_module_t作为自定义结构体的common成员变量,以便于JNI调用的时候通过它获得自定义的结构体变量,且methods->open的时候,传进hw_deivce_t(JNI只会初始化一个xx_device_t自定义结构体,通过强制类型转化把它转化为hw_device_t传给open函数)
驱动层:
它就负责向/proc ; /sys/class; /dev下创建的文件节点提供数据了。
- Android应用层调用驱动的全过程 精简版
- Android 应用层如何调用驱动节点
- 应用调用驱动层
- 应用层至驱动层的调用情况
- 应用层open如何调用驱动open函数的?
- 安卓应用层与底层驱动之间的调用
- Android Jni层调用应用层(Java)的方法
- 我的DIY Android之旅--Android应用层APP调用底层驱动实例(辛酸历程实记)
- Android 调用Jni的全过程
- Android应用层访问底层驱动的简易方法
- jsp调用geoserver图层,总结的最精简代码
- Linux驱动层调用应用层程序--call_usermodehelper()
- Linux学习:应用层open调用驱动层open过程
- 应用层对i2c通用驱动接口与eeprom的i2c驱动接口从应用层到内核层调用区别和联系
- Android驱动开发全过程
- Android应用层到Framework到HAL再到驱动层的整个流程分析
- Android开发之应用层到驱动层的接口实现(一)
- Android开发之应用层到驱动层的接口实现(二)
- 黑马程序员——银行调度系统
- POJ 2159 Ancient Cipher(水题)
- 欧拉函数(1286找新朋友)
- centos6.5上redis集群搭建,基于redis-3.0.0-beta8--安装redis并测试
- Spark1.0.0属性配置
- Android应用层调用驱动的全过程 精简版
- js实现对选中的多条记录进行删除操作
- WM_paint详解
- 利用Tomcat部署Web项目报错
- Linux Shell脚本与Vim常用操作笔记
- 继续xxx定律 hdoj 3784
- iOS 中的NSTimer定时器的作用
- ssl证书笔记
- yaml 4种java支持库的比较