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(按下)
- 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)的更多相关文章
- linux mount命令参数及用法详解
linux mount命令参数及用法详解 非原创,主要来自 http://www.360doc.com/content/13/0608/14/12600778_291501907.shtml. htt ...
- linux dmesg命令参数及用法详解(linux显示开机信息命令)
linux dmesg命令参数及用法详解(linux显示开机信息命令) http://blog.csdn.net/zhongyhc/article/details/8909905 功能说明:显示开机信 ...
- 【转】linux expr命令参数及用法详解
在抓包过程中,查看某个设定时间内,数据上下行多少,用命令expr 计算! --------------------------------------------------------------- ...
- linux sed命令参数及用法详解
linux sed命令参数及用法详解 http://blog.csdn.net/namecyf/article/details/7336308 1. Sed简介 sed 是一种在线编辑器,它一次处理一 ...
- linux dd命令参数及用法详解---用指定大小的块拷贝一个文件(也可整盘备份)
linux dd命令参数及用法详解---用指定大小的块拷贝一个文件 日期:2010-06-14 点击:3830 来源: 未知 分享至: linux dd命令使用详解 dd 的主要 ...
- (转)linux expr命令参数及用法详解
linux expr命令参数及用法详解 原文:http://blog.csdn.net/tianmohust/article/details/7628694 expr用法 expr命令一般用于整数值, ...
- (转)linux traceroute命令参数及用法详解--linux跟踪路由命令
linux traceroute命令参数及用法详解--linux跟踪路由命令 原文:http://blog.csdn.net/liyuan_669/article/details/25362505 通 ...
- Linux fdisk命令参数及用法详解---Linux磁盘分区管理命令fdisk
fdisk 命令 linux磁盘分区管理 用途:观察硬盘之实体使用情形与分割硬盘用. 使用方法: 一.在 console 上输入 fdisk -l /dev/sda ,观察硬盘之实体使用情形. 二.在 ...
- Linux set命令参数及用法详解
linux set 命令 功能说明:设置shell. 语 法:set [+-abCdefhHklmnpPtuvx] 补充说明:用set 命令可以设置各种shell选项或者列 出shell变量.单个选 ...
随机推荐
- C#写入文件的几种方式
1. FileStream.Write string filePath = Directory.GetCurrentDirectory() + "\\" + Process.Get ...
- java web Cookie浅谈
1.会话控制 > Http协议 Http协议两个缺陷: 1.HTTP协议是纯文本的 2.HTTP协议是无状态的 服务器不能简单的通过HTTP协议来区分多次请求是否发自同一个用户 虽然通过HTTP ...
- 常用perl脚本工具
1.批量添加license:PrefixLicense.pl (1)给单一c/c++源文件添加license: perl PrefixLicense.pl apache_license src_fil ...
- jaspersoft studio 的初级入门(一)
前言 最近的工作涉及到企业的报表生成功能,于是就想用此篇博客来记录我的学习历程.进入Jasperreport项目的官网发现有一个软件叫Jaspersoft studio的,它的版本也是6.3.1跟Ja ...
- 【Ubuntu 16】 SSH免密码登录
免密码登录时两个机器的普通用户名都要相同,这里都是dream361 ,主机名可以不同,这里的主机名都是ubuntu 1.目前有两台机器master 和 slave 在这两台机器上都安装并启动ssh服务 ...
- SQLite在C#中的安装与操作
SQLite 介绍 SQLite,是一款轻型的数据库,用于本地的数据储存. 先说说优点,它占用资源非常的低,在嵌入式设备中需要几百K的内存就够了:作为轻量级数据库,他的处理速度也足够快:支持的的容量级 ...
- 【渗透课程】第二篇上-http请求协议的简单描述
HTTP协议剖析 什么是HTTP协议?如何发起请求?我认为这样讲大家能够理解: 浏览器访问网站也是http请求的一个过程.当你打开浏览器,访问一个URL (协议://服务器IP:端口/路径/文件)的时 ...
- batの磕磕碰碰
前两天用kettle和存储过程实现了两个划小接口,然后用bat调用它们,在自己的xp系统上测试完全通过,没有任何问题. 然后很开心滴把成果打包给北京的同事他们使用.第二天他们跟我说无法取数,我马上就流 ...
- C++重写(override)、重载(overload)、重定义(redefine)以及虚函数调用
一.基本概念 对于C++中经常出现的函数名称相同但是参数列表或者返回值不同的函数,主要存在三种情况: 1.函数重写(override) 函数重载主要实现了父类与子类之间的多态性,子类中定义与父类中名称 ...
- 前端开发【第4篇:JavaScript基础】
JavaScript简述 上一篇文章已经聊过JavaScript的历史了这里不再复述了直接切入正题,JavaScript是一门解释型.动态类型.弱类型语言. 解释型语言和编译型语言就类似看一本书,编译 ...