全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026河北衡水市第八中学招聘备考题库附答案
- 企业风险管理制度
- 2026湖北省定向北京师范大学选调生招录考试备考题库附答案
- 2026福建厦门轨道建设发展集团有限公司校园招聘备考题库附答案
- 2026福建省面向中国政法大学学生选调生选拔工作考试备考题库附答案
- 2026西安西京初级中学教师招聘参考题库附答案
- 2026贵州赫章县德卓镇卫生院招聘村医备考题库附答案
- 2026陕西理工科技发展有限公司招聘参考题库附答案
- 2026青海省海东市互助县城市管理综合行政执法局招聘参考题库附答案
- 中共玉环市委宣传部关于下属事业单位 市互联网宣传指导中心公开选聘1名工作人员的备考题库附答案
- GB/T 15231-2023玻璃纤维增强水泥性能试验方法
- ESC2023年心脏起搏器和心脏再同步治疗指南解读
- 五年级上册道德与法治期末测试卷推荐
- 重点传染病诊断标准培训诊断标准
- 超额利润激励
- GB/T 2624.1-2006用安装在圆形截面管道中的差压装置测量满管流体流量第1部分:一般原理和要求
- 兰渝铁路指导性施工组织设计
- CJJ82-2019-园林绿化工程施工及验收规范
- 小学三年级阅读练习题《鸭儿饺子铺》原文及答案
- 六宫格数独100题
- 厨房设施设备检查表
评论
0/150
提交评论