


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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( 通过 schedule_work(来调用 timer_change_work 函 数,在此函数中利用 kobject_uevent( 来发送 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 mUEventObserver = new UEventObserver() Override public void onUEvent(UEventObserver.UEvent event) update(); sendIntent(); ;建立一个服务并重写 onUEvent 函数 private native void native_update(); private synchronized final void update() native_update();/调用 jni 中注册的 native_update()函数 private final void sendIntent() Intent intent = new Intent(“uevent_timer_status“);/启动广播 intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);/建立一个发送 intent.putExtra(“status“, mUeventTimerStatus);/发送变量 ActivityManagerNative.broadcastStickyIntent(intent, null);/向上层广播 在 SystemServer.java 中加入 UeventTimerService ueventtimer = null; 在 try catch 块中加入 ueventtimer = new UeventTimerService(); ServiceManager.addService(“ueventtimer“, ueventtimer); 三、应用层 apk onResume() super.onResume(); IntentFilter filter = new IntentFilter(); filter.addAction(“uevent_timer_status“); registerReceiver(mBroadcastReceiver, filter); onPause() super.onPause(); unregisterReceiver(mBroadcastReceiver); private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() Override public void onReceive(Context context, Intent intent) String action = intent.getAction(); if (action.equals(“uevent_timer_status“) int status = intent.getIntExtra(“status“, 0); String statusString = “; switch (status) case 0: statusString = “counting“; break; case 1: statusStri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教版初中化学九年级上册 第五单元课题1 质量守恒定律(第1课时) 教学设计
- 2024云南玉溪城投实业有限公司工作人员公开招聘1人笔试参考题库附带答案详解
- 振东制药:山西振东制药股份有限公司收购报告书
- 2024中铁北京工程局集团有限公司公开招聘4人笔试参考题库附带答案详解
- 2024中石化产融养老有限公司公开招聘1人(北京)笔试参考题库附带答案详解
- 百世金种子组长培训总结
- 岗位安全生产知识培训
- 工厂铣工安全培训课件
- 第四季度消防培训内容
- 费用报销管理制度培训
- 呵护地球家园点亮绿色希望-2025年4月22日第56个世界地球日主题教育班会 高中主题班会优 质课件
- 2025年河南资本集团招聘笔试参考题库含答案解析
- 2023年4月1日江苏省事业单位统考《综合知识和能力素质》(管理岗客观题)原卷+答案
- 走近湖湘红色人物智慧树知到答案2024年湖南工商大学
- 2024年江苏省南通市通州区中考一模英语试卷
- 完整版佛教葬礼仪式
- 【课件】第六章 模型或原型的制作课件-高中通用技术苏教版(2019)必修《技术与设计1》
- 锅炉除氧器过程控制课程设计
- 统计法培训课PPT课件
- 《电子游戏的利弊》PPT课件.ppt
- 毕业设计CK6163数控车床横向进给的设计
评论
0/150
提交评论