想研究Android从Linux驱动层到Android应用层的一整套流程,于是和刘同事做了个东东实现从驱动层到应用层的一整套通信,做完了,写个笔记备忘一下
总共需要增改的有四个东西,驱动、jni、java、apk
整体通信步骤如下:
linux驱动部分,主要利用sysfs文件系统建立一个class一个device和一个file,通过uevent去改变file所存储的值并通知上层,具体为利用一个定时器以固定的时间间隔发送uevent消息
最先接收linux发送的uevent的是vold,这是Android的一个守护进程,主要负责接收底层uevent的事件,并把此事件往上发送
在jni层通过register_android_server_xxxx 函数不断从sysfs中的file中读取信息,在onLoad.cpp中添加注册些服务
在java层新写一个自己的services,重写onEvent函数不断调用jni层的注册函数而更新信息,并通过Intent向上层广播
在apk层建立一个监听的服务不断监听Intent的事件并过滤,当捕获时改变一个textLabel的值从而显示出结果来