- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
android从驱动层到应用层
Android从驱动层到应用程序层的通信 研究一下Android从驱动层到应用层的通信机制是很有必要的,如新增加一个硬件并在应用层去控制硬件都需要用到,目的是知道需要增加哪些东西删改哪些东西而让系统依然工作正常。 总共需要增改的有四个东西,驱动、服务(jni、java)、应用apk 采用的方式是在驱动层写个字符型设备驱动其中内含一个定时器,每隔2秒发送一个uevent事件并改变sys下相关文件的内容,然后建立一个服务去读取文件并通过intent向上层广播,最后在应用程序层接收此事件并在TextView中显示出来 一、驱动层 kernel/drivers/char/uevent_test/test.c Kconfig Makefile 驱动层与服务层之间用到的通信机制是sys文件系统的uevent机制,涉及的函数有以下几个 在sys文件系统下建立一个类 class_create THIS_MODULE, uevent_timer ; 在类里建立一个设备 device_create uevent_timer_class, NULL, UEVENT_TIMER_MAJOR, NULL, uevent_timer_status ; 在设备目录下建立一个文件 device_create uevent_timer_class, NULL, UEVENT_TIMER_MAJOR, NULL, uevent_timer_status ; 在本项目中建立的目录文件是/sys/class/uevent_timer/uevent_timer_status/status 注意思在使用kobject_uevent函数发送uevent事件时需要建立一个工作队列来发送,否则会在发送过程中内核死掉。 INIT_WORK uevent_timer_dev- changed_work, timer_change_work ; 通过schedule_work uevent_timer_dev- changed_work ;来调用timer_change_work函数,在此函数中利用 kobject_uevent uevent_timer_dev- clsdev- kobj, KOBJ_CHANGE ; 来发送uevent事件. 当上层读取file时会调用uevent_timer_show_attrs函数来更新及显示文件内容 当上层写入file时会调用 uevent_timer_store_attrs函数来更新及写入文件内容 二、服务层 新建以下两个文件 frameworks/base/services/jni/com_android_server_UeventTimerService.cpp frameworks/base/services/jni/onload.cpp frameworks/base/services/java/com/android/server/UeventTimerService.java frameworks/base/services/java/com/android/server/SystemServer.java 1 JNI层 JNI是java调用本地的接口,JNI主要工作是打开驱动所创建的file并将其值读出来, 在static int readFromFile const char* path, char* buf, size_t size 函数中读取值 使用 static JNINativeMethod sMethods[] /* name, signature, funcPtr */ native_update, V, void* android_server_UeventTimerService_update , ;注册一个函数native_update以供服务的java层调用 修改onload.cpp,在其中加入 int register_android_server_UeventTimerService JNIEnv* env ;在JNI_OnLoad中加入 register_android_server_UeventTimerService JNIEnv* env ;在加载时启动此服务 (2)java层 建立一个类 Class UeventTimerService extends Binder Private int mUeventTimerStatus; Public UeventTimerService / mUEventObserver.startObserving SUBSYSTEM uevent_timer ; ;//此函数中调用开始服务 private UEventObserver mUEve
您可能关注的文档
最近下载
- 初一历史全册知识提纲.pdf VIP
- 9《复活》课件(共41张PPT)(含音频+视频).pptx VIP
- 掌握学习秘籍.pptx VIP
- 对已有设施、管线、设备、成品的保护措施方案.docx VIP
- 甘蔗叶资源化利用的可持续发展策略分析.pdf VIP
- 西门子FXS1800操作说明书.pdf
- 在线网课学习课堂《Advanced Medical English(首都医大 )》单元测试考核答案.docx VIP
- 高中地理一轮复习第一部分自然地理第七单元地表形态的塑造喀斯特地貌教案(2025—2026学年).docx VIP
- 2025士兵考学综合试题及答案.docx VIP
- 2021血管压力治疗中国专家共识(全文).docx VIP
有哪些信誉好的足球投注网站
文档评论(0)