Android 应用层如何调用驱动节点
来源:互联网 发布:淘宝给差评会怎么样 编辑:程序博客网 时间:2024/05/22 06:39
背景介绍:
做系统工程师的,经常会遇到协同开发,驱动同事开发完成后,会给我设备节点,刚好公司新研发了一个项目,我需要在工程模式中开发一个蜂鸣器测试项。
一、蜂鸣器节点
驱动同事给了我蜂鸣器节点:/dev/input/event2 ,我们在adb shell中可以查看到event2的属性
root@yzm7330p0:/ # geteventadd device 1: /dev/input/event2 name: "pwm-beeper"add device 2: /dev/input/event0 name: "comip-gpio-keys"add device 3: /dev/input/event3 name: "comip_snd_soc Headset"add device 4: /dev/input/event1 name: "comip-powerkey"
Android可以使用sendevent来模拟触屏,键盘以及其他类型的event事件,
sendevent /dev/input/eventX type code value
/dev/input/eventX 对应一个event设备,可以通过getevent获得可用的event设备
type, code, value的定义可参看kernel/include/Linux/input.h
type如下定义
type: 输入设备类型,在手机系统中经常使用的键盘(keyboard)和小键盘(kaypad)属于按键设
备EV_KEY,轨迹球属于相对设备EV_REL,触摸屏属于绝对设备EV_ABS
code: 按键扫描码,区别于ASCII码和SDK中KeyEvent的键码
value: 附加码,1/0 down/up
按照此格式那么我们蜂鸣器的节点查询后得到:sendevent /dev/input/event2 18 1 1 及 sendevent /dev/input/event2 18 1 0
二、将数据写入节点
这边我实现了个cmd输入
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;
public static String execShellCommand(String cmd) { String returnString = ""; Process pro = null; Runtime runTime = Runtime.getRuntime(); Log.d(TAG, "execShellCommand : " + cmd); if (runTime == null) { Log.e(TAG, "Create runtime false!"); return null; } try { pro = runTime.exec(cmd); BufferedReader input = new BufferedReader(new InputStreamReader(pro.getInputStream())); PrintWriter output = new PrintWriter(new OutputStreamWriter(pro.getOutputStream())); String line; while ((line = input.readLine()) != null) { returnString = returnString + line + "\n"; } input.close(); output.close(); pro.destroy(); } catch (IOException e) { e.printStackTrace(); } Log.d(TAG, "execShellCommand result : " + returnString); return returnString; }
三、权限问题
以上我的思路基本已经实现,然而自己调试的发现,在adb shell中输入节点蜂鸣器响应,而在我写的应用中不会响应,最后查询出来是权限问题。
为了解决这个问题,我取了个巧,将event2 这个节点的权限改为了system权限
具体操作是在device\leadcore\common 中的init.rc中修改了他的权限。init.rc 是当我们机器重启的第一时间会执行的文件。
# MAT just have system permissions,set event2 to system chown root system /dev/input/event2
0 0
- Android 应用层如何调用驱动节点
- 应用调用驱动层
- 应用层open如何调用驱动open函数的?
- Android应用层调用驱动的全过程 精简版
- 应用层至驱动层的调用情况
- Linux驱动层调用应用层程序--call_usermodehelper()
- Linux学习:应用层open调用驱动层open过程
- android底层驱动学习之从应用程序如何到底层driver的调用
- 从驱动层到应用层打通Android系统通路
- 应用层open(read、write、close)如何调用驱动open(read、write、close)函数的?
- 我的DIY Android之旅--Android应用层APP调用底层驱动实例(辛酸历程实记)
- 安卓应用层与底层驱动之间的调用
- s5p4418 Android 4.4.2 驱动层 HAL层 服务层 应用层 开发流程记录(一 硬件驱动层)
- Android Jni层调用应用层(Java)的方法
- android从应用层到HRL层调用流程
- Android应用层对proc节点的读写
- 应用层到驱动层
- 应用层和驱动如何判断当前的启动模式
- 04-常见mr算法实现和shuffle的机制
- jdk与cglib动态代理
- Eclipse使用Git管理git远程仓库项目(以开源中国-码云为例)
- Linux服务器部署Web项目的步骤和方法
- 我的jsp
- Android 应用层如何调用驱动节点
- 骨牌铺方格
- 在64位的系统下,Armadillo 和VS2013的安装与配置
- Beautiful Soup 4.4.0 文档
- c++实验2 两点间距离
- Tesseract-OCR的Training简明教程
- phpstudy拓展redis
- android做自定义拍照功能时,三星手机拍出来的图片会横屏显示
- Retrofit浅析及使用