Linux-hexdump命令调试event驱动—详解(13)

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(按下)
 0000000             07c6 0000      faa2 000b      0001        0026          0001 0000
//hexdump序列号          秒             微妙         同步事件       code        value=0 
 0000010            07c6 0000      faac 000b       0000        0000          0000 0000

/*松开时:*/
//hexdump序列号          秒             微妙         键盘事件     code=0x26     value=0(松开)
 0000020             07c6 0000     cf67 000d        0001        0026         0000 0000
//hexdump序列号          秒             微妙         同步事件      code         value=0 
 0000030             07c6 0000     cf70 000d        0000        0000         0000 0000

2.调试触摸屏驱动

(触摸屏驱动代码: )

 /dev/event0            //触摸屏驱动
# hexdump /dev/event0 
//hexdump序列号          秒             微妙        绝对坐标事件    code=ABS_X   X坐标值 
0000000               0412 0000      6ef0 000c      0003          0000      0239 0000
//hexdump序列号          秒             微妙        绝对坐标事件    code=ABS_Y   Y坐标值
0000010                 0412 0000    6f08 000c      0003          0001      01ae 0000
//hexdump序列号          秒             微妙        绝对坐标事件    code=压力     压力值
0000020             0412 0000        6f0c 000c      0003          0018      0001 0000
//hexdump序列号          秒             微妙        键盘事件       code=触摸按键  value=1(按下)
0000030              0412 0000       6f10 000c      0001          014a      0001 0000
//hexdump序列号          秒             微妙        同步事件      
0000040             0412 0000        6f13 000c      0000          0000      0000 0000

//hexdump序列号          秒             微妙        绝对坐标事件    code=压力     压力值
00000b0               023b 0000      872d 000c      0003          0018      0000 0000

//hexdump序列号          秒             微妙        键盘事件      code=触摸按键  value=0(松开)
00000b0            0412 0000         1f5b 000d     0001          014a       0000 0000
//hexdump序列号          秒             微妙        同步事件      
00000c0             0412 0000        1f70 000d     0000          0000       0000 0000

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我是攻城师

Hadoop+Maven项目打包异常

3787
来自专栏人人都是极客

Linux 程序编译过程的来龙去脉

大家肯定都知道计算机程序设计语言通常分为机器语言、汇编语言和高级语言三类。高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解...

703
来自专栏向治洪

命令模式

命令模式定义 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 作用 命令模式主要应用于将行...

1739
来自专栏hotqin888的专栏

bootstrap treeview lazyload懒加载实践bootstrap treeview 增删改的正确姿势

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

921
来自专栏农夫安全

代码审计之命名执行漏洞

环境:windows + apache + mysql + php (phpstudy) 由于是在Windows下进行的测试,所以和Linux下的测试会有所不...

2786
来自专栏农夫安全

代码审计之命令执行漏洞

环境:windows + apache + mysql + php (phpstudy) 由于是在Windows下进行的测试,所以和Linux下的测试会有所不...

2476
来自专栏BeJavaGod

不错位的 java .class 反编译工具推荐

我们经常会反编译看一些class文件,但是反编译出来的文件里面会有很多杂乱的东西 一直以来都是用的idea来反编译的,只要把class文件往里面一拖就行了 这么...

3625
来自专栏大内老A

.NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”

FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为...

1746
来自专栏owent

可执行文件压缩

最近看Rust相关东西的时候看到一篇关于压缩可执行文件的文章。压缩可执行文件对嵌入式开发特别有用,但是延伸一下用来减少我们游戏行业里预编译的工具二进制包大小和A...

641
来自专栏专注 Java 基础分享

弄懂 JRE、JDK、JVM 之间的区别与联系

其实很多 Java 程序员在写了很多代码后,你问他 jre 和 jdk 之间有什么关系,jvm 又是什么东西,很多人不知所云。本篇不会讲述 jvm 底层是如何与...

3424

扫码关注云+社区