Android从驱动层到应用程序层的通信

本文详细介绍了Android系统中如何实现从驱动层到应用层的通信,通过创建一个字符型设备驱动,包含定时器发送uevent事件。服务层通过JNI与Java层交互,读取驱动状态并广播给应用层。应用层接收到广播后,更新UI显示。主要涉及驱动开发、JNI、服务和广播接收器。
摘要由CSDN通过智能技术生成

研究一下Android从驱动层到应用层的通信机制是很有必要的,如新增加一个硬件并在应用层去控制硬件都需要用到,目的是知道需要增加哪些东西删改哪些东西而让系统依然工作正常。

总共需要增改的有四个东西,驱动、服务(jnijava)、应用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函数,在此函数中利用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值