hexdump: 查看文件的内容,比如二进制文件中包含的某些字符串,通常用来调试驱动用

描述:

我们以event1为例,当我们insmod挂载了键盘驱动后,出现一个event1设备,

此时没有按键按下,所以event1里面的数据是没有的,那么数据又是从来哪里来?

通过键盘驱动的read函数,若有按键按下,就会上传按键数据给用户层hexdump

因为键盘驱动的input_handler 是:evdev_handler

所以键盘驱动的read函数是: evdev_handler->evdev_fops->evdev_read

进入evdev_read()函数,如下图所示:

evdev_event_to_user()这个函数从字面上来看,显然就是用来上传给用户层的函数,其中buffer是函数参数,指向用户层,

所以数据就是event.

我们来看看event的结构体:input_event

struct input_event {
struct timeval time; //事件发生的时间
__u16 type; // 哪类事件, 比如键盘事件
__u16 code;   // 对应的事件里支持的哪个变量,比如按键K
__s32 value;   // 对应的变量里的数值, 比如松开按键则是1,反之为0
};

把 time里的成员展开如下:

 struct input_event {
long tv_sec; /* seconds */ //秒
long tv_usec; /* microseconds */ //微妙 __u16 type; // 哪类事件, 比如键盘事件
__u16 code;   // 对应的事件里支持的哪个变量,比如按键K
__s32 value;   // 对应的变量里的数值, 比如松开按键则是1,反之为0
};

所以我们hexdump调试任何输入子系统event XX驱动时,有信息就会打印上面数据

 1.调试键盘驱动

(键盘驱动代码:http://www.cnblogs.com/lifexy/p/7553861.html)

以按开发板的按键 KEY_L,为例(因为数据是从低到高打印的,所以数据是反的):

# hexdump /dev/event1     //按键键盘驱动

/*按下时:*/
//hexdump序列号 秒 微妙 键盘事件 code=KEY_L value=1(按下)
  07c6 faa2 000b
//hexdump序列号 秒 微妙 同步事件 code value=0
  07c6 faac 000b /*松开时:*/
//hexdump序列号 秒 微妙 键盘事件 code=0x26 value=0(松开)
07c6 cf67 000d
//hexdump序列号 秒 微妙 同步事件 code value=0
07c6 cf70 000d

2.调试触摸屏驱动

(触摸屏驱动代码: )

 /dev/event0            //触摸屏驱动
# hexdump /dev/event0
//hexdump序列号 秒 微妙 绝对坐标事件 code=ABS_X X坐标值
6ef0 000c
//hexdump序列号 秒 微妙 绝对坐标事件 code=ABS_Y Y坐标值
6f08 000c 01ae
//hexdump序列号 秒 微妙 绝对坐标事件 code=压力 压力值
6f0c 000c
//hexdump序列号 秒 微妙 键盘事件 code=触摸按键 value=1(按下)
6f10 000c 014a
//hexdump序列号 秒 微妙 同步事件
6f13 000c //hexdump序列号 秒 微妙 绝对坐标事件 code=压力 压力值
00000b0 023b 872d 000c //hexdump序列号 秒 微妙 键盘事件 code=触摸按键 value=0(松开)
00000b0 1f5b 000d 014a
//hexdump序列号 秒 微妙 同步事件
00000c0 1f70 000d

也可以使用getevent 命令,用于获取 input 输入事件,比如获取按键上报信息、获取触摸屏上报信息等。

示例:

格式输出为event type、event code、event value

比如 EV_KEY 330  0    表示:   按键事件的BTN_TOUCH触摸按键(ox14a) 松开了(0)

EV_ABS     1  72   表示:    绝对坐标事件的ABS_Y(1)坐标位于72

这些定义都在input.h里,比如EV_ABS的code有:

Linux-hexdump命令调试event驱动—详解(13)的更多相关文章

  1. linux mount命令参数及用法详解

    linux mount命令参数及用法详解 非原创,主要来自 http://www.360doc.com/content/13/0608/14/12600778_291501907.shtml. htt ...

  2. linux dmesg命令参数及用法详解(linux显示开机信息命令)

    linux dmesg命令参数及用法详解(linux显示开机信息命令) http://blog.csdn.net/zhongyhc/article/details/8909905 功能说明:显示开机信 ...

  3. 【转】linux expr命令参数及用法详解

    在抓包过程中,查看某个设定时间内,数据上下行多少,用命令expr 计算! --------------------------------------------------------------- ...

  4. linux sed命令参数及用法详解

    linux sed命令参数及用法详解 http://blog.csdn.net/namecyf/article/details/7336308 1. Sed简介 sed 是一种在线编辑器,它一次处理一 ...

  5. linux dd命令参数及用法详解---用指定大小的块拷贝一个文件(也可整盘备份)

    linux dd命令参数及用法详解---用指定大小的块拷贝一个文件 日期:2010-06-14 点击:3830 来源: 未知 分享至:            linux dd命令使用详解 dd 的主要 ...

  6. (转)linux expr命令参数及用法详解

    linux expr命令参数及用法详解 原文:http://blog.csdn.net/tianmohust/article/details/7628694 expr用法 expr命令一般用于整数值, ...

  7. (转)linux traceroute命令参数及用法详解--linux跟踪路由命令

    linux traceroute命令参数及用法详解--linux跟踪路由命令 原文:http://blog.csdn.net/liyuan_669/article/details/25362505 通 ...

  8. Linux fdisk命令参数及用法详解---Linux磁盘分区管理命令fdisk

    fdisk 命令 linux磁盘分区管理 用途:观察硬盘之实体使用情形与分割硬盘用. 使用方法: 一.在 console 上输入 fdisk -l /dev/sda ,观察硬盘之实体使用情形. 二.在 ...

  9. Linux set命令参数及用法详解

    linux  set 命令 功能说明:设置shell. 语 法:set [+-abCdefhHklmnpPtuvx] 补充说明:用set 命令可以设置各种shell选项或者列 出shell变量.单个选 ...

随机推荐

  1. Ransom Note(383)

    题目:Given an arbitrary ransom note string and another string containing letters from all the magazine ...

  2. sqlite的几种访问方法

    方法1:直接执行SQL语句 sqlite3* db = Open(_T("./test.db3"), FALSE); if (db != NULL) { ExecuteSQL(db ...

  3. Android上传图片到服务器,服务端利用.NET WCFRest服务读取文件的解决方案

    在项目中遇到要将Android设备拍摄的照片上传的服务器,将文件保存在服务器本地的文件夹中,数据库中保存的是图片文件名.整个上传是将图片生成二进制流通过HTTP请求上传到服务端,服务端是基于.NET环 ...

  4. AugularJS1.X不升级到2.X

    面试中提到AugularJS1.X不升级到2.X,而是改用React的原因是,可以利用很多React现成的组件,需要确认下 以及提到了Vue, Weex技术

  5. fs模块练习

    1.fs+path练习01.判断 当前路径下的public是否存在,不存在则创建02.判断 public下的index.html文件是否存在,不存在则创建 <h1>index</h1 ...

  6. 如何设计和实现一个web app

    web app简介 web app其实不算是什么新鲜的东西,相比于传统的web和传统的app,web app这种web和app相结合的产物有的优点如下: 1. 开发上web app更有便捷性,ios开 ...

  7. Python输入函数 raw_input( ) 与 input()

    一. raw_input() 在Python中,获取键盘输入的数据的方法是采用 raw_input 函数,那么这个 raw_input 怎么用呢? 注意: raw_input()的小括号中放入的是,提 ...

  8. Fatal error: Class 'LearningPHP1\mysqli' not found

    在php文件的头部使用了namespace 结果报错mysqli不在LearningPHP1中, 结论:如果定义了命名空间,在使用mysqli做连接的时候就要指明mysqli所在的命名空间. < ...

  9. 解决VS2015中没有报表项(ReportViewer)的方法

    作者:何时.微笑成了种奢求 VS2015中没有报表项(ReportViewer),怎么办?这篇文章主要为大家详细介绍了解决VS2015中没有报表项(ReportViewer)的方法,感兴趣的小伙伴们可 ...

  10. 使用js jquery分别获取地址栏参数值

    使用JS获取地址栏参数 方法一: function GetQueryString(name) { var reg = new RegExp("(^|&)"+ name +& ...