调试tp驱动常用的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

4、查看tp驱动是否加载成功

tp驱动实际上是i2c设备驱动,通过查看i2c设备节点可以查看到驱动的相关信息。

adb shell
ll /sys/bus/i2c/drivers

如果像是列表中有对应名字的目录,那说明驱动加载成功。此时可以进入到对应的目录中list可以查看当前驱动的信息。如下:
调试tp驱动常用的adb命令_第1张图片

从上面的信息中可以知道当前设备是挂接到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)坐标附近触摸三次,得到的信息如下:
调试tp驱动常用的adb命令_第2张图片

可见,一次触摸抬起的动作对应的报告格式是:
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

你可能感兴趣的:(Linux,Device,Driver)