触摸屏 adb调试
1、adb shell cat /proc/kmsg
这条命令肯定是要放在第一位的,可以打印内核信息,对应于驱动程序中的printk语句。
如果出现以下提示,说明权限不够,可以通过adb root获取root权限。/system/bin/sh: cat: /proc/kmsg: Permission denied
另外,也可以将kmsg的内容重定向写入一个log文件中。可以依次执行下面命令
adb shell
cat /proc/kmsg > /mnt/sdcard/log可将kmsg的内容重定向到 /mnt/sdcard/ 路径下的log文件。
2、adb pull
当我们将log保存在 /mnt/sdcard/ 路径下的时候,可以通过adb pull命令取出来放到指定路径。
adb pull /mnt/sdcard/log C:\Users\Administrator\Desktop
有的样机会提示不可读写,那么可以在pull或者push之前加上adb remount的命令。
3、adb push
如果我们某个APP应用需要某个.so文件,那么可以通过adb push将指定的.so文件推送到指定的路径。
adb push C:\Users\Administrator\Desktop\sensors.sc8830.so /system/lib/hw
adb push C:\Users\Administrator\Desktop\sensors.sc8830.so /system/lib/hw
4、查看tp驱动是否加载成功
tp驱动实际上是i2c设备驱动,通过查看i2c设备节点可以查看到驱动的相关信息。
adb shell
ll /sys/bus/i2c/drivers
如果像是列表中有对应名字的目录,那说明驱动加载成功。此时可以进入到对应的目录中list可以查看当前驱动的信息。如下:
从上面的信息中可以知道当前设备是挂接到i2c-0上面,其i2c的设备地址是0x20(七位地址),驱动的名字为”tcm1680”。
5、调试触摸tp有无反应
使用adb shell getevent 指令,如果手指触摸tp,会有相应的event打印出来,如下面的格式:
/dev/input/event5: 0003 0039 00000053
/dev/input/event5: 0003 0039 00000000
/dev/input/event5: 0003 0035 00000228
/dev/input/event5: 0003 0036 00000159
/dev/input/event5: 0000 0000 00000000
/dev/input/event4: 0003 0002 fffffc0d
/dev/input/event4: 0000 0000 00000000
/dev/input/event5: 0003 0036 00000157
/dev/input/event5: 0000 0000 00000000
/dev/input/event5: 0003 0035 00000229
/dev/input/event5: 0003 0036 00000155
/dev/input/event5: 0000 0000 00000000
/dev/input/event5: 0003 0035 0000022a
/dev/input/event5: 0003 0036 00000153
/dev/input/event5: 0000 0000 00000000
/dev/input/event5: 0003 0035 0000022b
/dev/input/event5: 0003 0036 00000151
/dev/input/event5: 0000 0000 00000000
这就是说明tp已经有反应了,进一步说明tp驱动加载成功且中断以及i2c都正常。
6、使用adb shell getevent指令
该指令有如下用法:
Usage: getevent [-t] [-n] [-s switchmask] [-S] [-v [mask]] [-d] [-p] [-i] [-l] [-q] [-c count] [-r] [device]
-t: show time stamps
-n: don’t print newlines
-s: print switch states for given bits
-S: print all switch states
-v: verbosity mask (errs=1, dev=2, name=4, info=8, vers=16, pos. events=32, props=64)
-d: show HID descriptor, if available
-p: show possible events (errs, dev, name, pos. events)
-i: show all device info and possible events
-l: label event types and names in plain text
-q: quiet (clear verbosity mask)
-c: print given number of events then exit
-r: print rate events are received
7、查看当前的input设备
在驱动程序中我们都要注册一个input设备,可以通过以下指令查看所有的input设备,并看是否注册成功:
adb shell getevent -i
执行结果为:
add device 1: /dev/input/event5
bus: 0018
vendor dead
product beef
version 0101
name: “chm_ts”
location: “input/ts”
id: “”
version: 1.0.1
events:
ABS (0003): 002f : value 0, min 0, max 10, fuzz 0, flat 0, resolution 0
0030 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
0032 : value 0, min 0, max 200, fuzz 0, flat 0, resolution 0
0035 : value 0, min 0, max 800, fuzz 0, flat 0, resolution 0
0036 : value 0, min 0, max 480, fuzz 0, flat 0, resolution 0
0039 : value 0, min 0, max 65535, fuzz 0, flat 0, resolution 0
input props:
INPUT_PROP_DIRECT
add device 2: /dev/input/event4
bus: 0018
vendor 0000
product 0000
version 0000
name: “mir3da”
location: “”
id: “”
version: 1.0.1
events:
ABS (0003): 0000 : value 28, min -16384, max 16383, fuzz 0, flat 0, resolution 0
0001 : value 71, min -16384, max 16383, fuzz 0, flat 0, resolution 0
0002 : value -1012, min -16384, max 16383, fuzz 0, flat 0, resolution 0
input props:add device 3: /dev/input/event3
bus: 0019
vendor 0001
product 0001
version 0100
name: “sunxi-keyboard”
location: “sunxikbd/input0”
id: “”
version: 1.0.1
events:
KEY (0001): 001c 0066 0072 0073 008b
input props:add device 4: /dev/input/event0
bus: 0019
vendor 0001
product 0001
version 0100
name: “axp22-supplyer”
location: “m1kbd/input2”
id: “”
version: 1.0.1
events:
KEY (0001): 0074
input props:add device 5: /dev/input/event2
bus: 0019
vendor 0001
product 0001
version 0100
name: “sunxi-ths”
location: “sunxiths/input0”
id: “”
version: 1.0.1
events:
ABS (0003): 0028 : value 0, min -50, max 180, fuzz 0, flat 0, resolution 0
input props:add device 6: /dev/input/event1
bus: 0019
vendor 0001
product ffff
version 0100
name: “headset”
location: “headset/input0”
id: “”
version: 1.0.1
events:
KEY (0001): 0072 0073 00e2
input props:could not get driver version for /dev/input/mice, Not a typewriter
其中/dev/input/event5是我们注册的input设备,名字为”chm_ts”,其中
ABS (0003): 002f : value 0, min 0, max 10, fuzz 0, flat 0, resolution 0
0030 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
0032 : value 0, min 0, max 200, fuzz 0, flat 0, resolution 0
0035 : value 0, min 0, max 800, fuzz 0, flat 0, resolution 0
0036 : value 0, min 0, max 480, fuzz 0, flat 0, resolution 0
0039 : value 0, min 0, max 65535, fuzz 0, flat 0, resolution 0
这里面的内容对应于驱动中申请input设备对其初始化的内容,包括:
最大支持手指数 ABS_MT_TRACKING_ID 为 10;
手指压力范围 ABS_MT_TOUCH_MAJOR 为 255;
手指按压宽度 ABS_MT_WIDTH_MAJOR 为 200;
X方向的最大触摸范围 ABS_MT_POSITION_X 为 800;
Y方向的最大触摸范围 ABS_MT_POSITION_Y 为 480;
8、查看报点率
这个问题一般是客户比较关注了,报点率决定了触摸的响应速度,报点率过低直接会影响到体验。可通过以下指令查看报点率:
adb shell getevent -r /dev/input/event5
9、查看详细的报点
adb shell getevent -l /dev/input/event5
假设我手指连续在(0xd8, 16f)即(216, 367)坐标附近触摸三次,得到的信息如下:
可见,一次触摸抬起的动作对应的报告格式是:
EV_ABS ABS_MT_TRACKING_ID
当前触摸的ID,这个会一直累加上去的;
EV_ABS ABS_MT_POSITION_X
EV_ABS ABS_MT_POSITION_Y
当前触摸的X和Y的坐标;
EV_KEY BTN_TOUCH
标记是按下或者抬起的动作;
EV_SYN SYN_REPORT
标记一次上报结束;
EV_ABS ABS_MT_TRACKING_ID
如果这个值为0xffffffff,那么说明当前是抬起动作,后面跟上的BTN_TOUCH要为UP;
EV_KEY BTN_TOUCH
标记是按下或者抬起的动作;
EV_SYN SYN_REPORT
标记一次上报结束;
10、sendevent
sendevent的作用与getevent相反,可以往input设备中写入值。
网上有很多用例,不过需要注意的是一定要符合input上报的协议才能成功。
11、发送特定按键的信息
手机上通常有几个特定的功能按键,比如返回键、home键、设置键等。可以使用
adb shell input keyevent key_code
进行特殊的操作,比如输入下面的指令就相当于按下返回键
adb shell input keyevent 3
具体的key_code可以参照以下两篇文章:
ADB Shell Input Events
KeyEvent
12、setenforce
在调试展讯平台的tp驱动,有时候我们调试用的APK无法正常使用,内核会有如下提示信息:
<36>[ 93.437866] c0 type=1400 audit(1325376121.928:24): avc: denied { write } for pid=2502 comm=”com.chm.tstools” name
=”chm_ts” dev=”proc” ino=4026533105 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:proc:s0 tclass=file permissive=0
即当前应用程序”com.chm.tstools”无法往名为”chm_ts”的proc设备节点上写入数据,因此可见是一个权限的为。可以使用以下命令解决:
adb shell setenforce 0
13、查看虚拟按键的坐标
Android framework中,对于虚拟按键的处理实际上是将驱动中上报的坐标判断是否在按键区域中的坐标范围之内,如果在那范围内,那么就当做按键处理。
在 /sys/board_properties/ 目录下,会有一个设备文件,这个设备文件的内容里面包含按键的信息。
adb shell cat /sys/board_properties/virtualkeys.focaltech_ts
我手上的一台展讯平台样机,不包含按键区域的分辨率是480x800,采用的是focaltech的触控IC。上述命令得到的结果如下:
0x01:139:80:900:80:65:0x01:172:240:900:80:65:0x01:158:400:900:80:65
里面各个参数的意义如下:
0x01: A version code. Must always be 0x01.
139: The Linux key code of the virtual key.
80: The X pixel coordinate of the center of the virtual key.
900: The Y pixel coordinate of the center of the virtual key.
80: The width of the virtual key in pixels.
65: The height of the virtual key in pixels.
具体的内容可以参照Android tp的虚拟按键(virtual key)处理
14、输入配置文件
有时候在调试tp驱动碰到这么一种情况,就是触摸的时候屏幕上一直有个小白点,且滑动的时候看起来像是滑动触摸板,怎么解释呢?就是tp驱动上报应该按照绝对坐标的方式而不是触摸板按照相对坐标的方式上报的。此时可以怀疑是idc文件没有添加。
可以在 /system/usr/idc 目录下添加一个与input设备同样名字的idc文件。
15、屏幕截图
如果有screencap命令,则可以使用该命令截图
adb shell /system/bin/screencap -p /sdcard/screenshot.png
adb pull /sdcard/screenshot.png d:/screenshot.png
触摸屏 adb调试的更多相关文章
- [转] Android实时抓包分析 : 善用adb调试桥
Android实时抓包分析 : 善用adb调试桥 谈到android网络抓包,很多人都能想到牛逼轰轰的神器tcpdump.方法就是在android机器上面安装tcpdump,然后通过-w参数把抓包 ...
- ADB调试桥安装(方式二)
想使用ADB工具可以通过安装安卓SDK套件,然后通过SDK里面的adb工具连接手机进行调试, 然而这种方式安装起来多多少少还是有点麻烦,ADB调试桥安装(方式一). 另一种方式来的就更为舒服一些了,即 ...
- WIFI无线adb调试android
有个需求需要支持android插上键盘,鼠标等外设,但是这样就不能使用microusb口进行adb调试了. 研究了一番,发现可以利用wifi进行adb无线调试(adb应该本身已经支持无线调试). WI ...
- adb这点小事——远程adb调试
欢迎转载.转载请注明:http://blog.csdn.net/zhgxhuaa 1. 前言 1.1. 写在前面的话 在之前的一篇文章<360电视助手实现研究>中介绍了在局域网内直接 ...
- 如何通过网络连接进行ADB调试
点击打开链接 大家在使用adb调试Android系统时可能会遇到麻烦,比如usb端口只有一个,如果用作adb调试,就不能通过usb连接其它器件,或者usb端口不能使用时也没法进行adb调试. Andr ...
- adb调试
adb usb调试,adb网络调试是非常实用的工具,通过电脑连接手机达到文件传输.电脑端安装app刷机等功能材料: 材料: 1.电脑端安装号对应手机的驱动程序 2.电脑端下载好adb调试工具 3.手机 ...
- android默认开启adb调试方法分析
用adb调试android时,每次接入usb线,都会提示一个确认打开usb调试功能的窗口,有时候,我们需要默认打开usb调试功能.或者无需弹出对话框,直接默认开启.这个我们需要分析adb的流程了. a ...
- adb调试android设备 说的比较清楚的一篇文章
ADB支持两种连接Android系统的方式,USB方式及网络方式.一般手机及平板默认会设置为USB方式.android系统底层运行着一个服务(adbd),用于相应和管理大家在电脑端的adb命令连接,这 ...
- android判断adb调试是否打开及代码跳转到开发者选项界面
boolean enableAdb = (Settings.Secure.getInt(getContentResolver(), Settings.Secure.ADB_ENABLED, 0) &g ...
随机推荐
- redis 集群java.lang.NoSuchMethodError:SpringJAR包版本冲突错误解决方法
项目中出现如下错误,记录下解决方法: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exce ...
- python中if not x: 和 if x is not None: 和 if not x is None的使用和区别
代码中经常会有变量是否为None的判断,有三种主要的写法: 第一种是`if x is None`: 第二种是 `if not x:`: 第三种是`if not x is None`(这句这样理解更清晰 ...
- JSP中的数据库操作,MySQL基础操作(一)
一.JDBC JDBC(java data base concectivity),是一种用于执行SQL语句的java API,可以为多种关系库提供统一访问. 通常使用JDBC完成以下操作: 1)同数据 ...
- golang 创建一个简单的资源池,重用资源,减少GC负担
package main; import ( "sync" "errors" "fmt" ) //代码参考<Go语言实战>中第7 ...
- Django TypeError: isinstance() arg 2 must be a type or tuple of types
报错: TypeError: isinstance() arg must be a type or tuple of types from django.db import modelsfrom dj ...
- React-router4 笔记
第一次看React-router发现根据阮一峰老师教程老报错,,完全一样的代码还是报错,,然而到最后才发现自己安装的版本太高了! 由于菜鸟比较新,npm install react-router 这样 ...
- Bonding
一.简介 双网卡配置设置虚拟为一个网卡实现网卡的冗余,其中一个网卡坏掉后网络通信仍可正常使用,实现网卡层面的负载均衡和高可用性 二.原理 网卡工作在混杂(promisc)模式,接收到达网卡的所有数 ...
- hdu 1059 (多重背包) Dividing
这里;http://acm.hdu.edu.cn/showproblem.php?pid=1059 题意是有价值分别为1,2,3,4,5,6的商品各若干个,给出每种商品的数量,问是否能够分成价值相等的 ...
- Nginx 的 docker 部署
1.输入命令 docker pull nginx:1.15 拉取 nginx 的镜像: 2.使用 docker images 查看拉取到的镜像信息: 3.在主机上创建用于映射的目录 mkdir -p ...
- ubuntu 启动时提示 Failed to load session ubuntu
启动时候提示 Failed to load session ubuntu 通过 CTRL + ALT + [F1~F6] 进入终端界面登陆进系统, 进去之后执行 sudo apt-get instal ...