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

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

把 time里的成员展开如下:

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

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

 1.调试键盘驱动

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

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

  1. # hexdump /dev/event1 //按键键盘驱动
  2.  
  3. /*按下时:*/
  4. //hexdump序列号 秒 微妙 键盘事件 code=KEY_L value=1(按下)
  5.   07c6 faa2 000b
  6. //hexdump序列号 秒 微妙 同步事件 code value=0
  7.   07c6 faac 000b
  8.  
  9. /*松开时:*/
  10. //hexdump序列号 秒 微妙 键盘事件 code=0x26 value=0(松开)
  11. 07c6 cf67 000d
  12. //hexdump序列号 秒 微妙 同步事件 code value=0
  13. 07c6 cf70 000d

2.调试触摸屏驱动

(触摸屏驱动代码: )

  1. /dev/event0 //触摸屏驱动
  2. # hexdump /dev/event0
  3. //hexdump序列号 秒 微妙 绝对坐标事件 code=ABS_X X坐标值
  4. 6ef0 000c
  5. //hexdump序列号 秒 微妙 绝对坐标事件 code=ABS_Y Y坐标值
  6. 6f08 000c 01ae
  7. //hexdump序列号 秒 微妙 绝对坐标事件 code=压力 压力值
  8. 6f0c 000c
  9. //hexdump序列号 秒 微妙 键盘事件 code=触摸按键 value=1(按下)
  10. 6f10 000c 014a
  11. //hexdump序列号 秒 微妙 同步事件
  12. 6f13 000c
  13.  
  14. //hexdump序列号 秒 微妙 绝对坐标事件 code=压力 压力值
  15. 00000b0 023b 872d 000c
  16.  
  17. //hexdump序列号 秒 微妙 键盘事件 code=触摸按键 value=0(松开)
  18. 00000b0 1f5b 000d 014a
  19. //hexdump序列号 秒 微妙 同步事件
  20. 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. C#写入文件的几种方式

    1. FileStream.Write string filePath = Directory.GetCurrentDirectory() + "\\" + Process.Get ...

  2. java web Cookie浅谈

    1.会话控制 > Http协议 Http协议两个缺陷: 1.HTTP协议是纯文本的 2.HTTP协议是无状态的 服务器不能简单的通过HTTP协议来区分多次请求是否发自同一个用户 虽然通过HTTP ...

  3. 常用perl脚本工具

    1.批量添加license:PrefixLicense.pl (1)给单一c/c++源文件添加license: perl PrefixLicense.pl apache_license src_fil ...

  4. jaspersoft studio 的初级入门(一)

    前言 最近的工作涉及到企业的报表生成功能,于是就想用此篇博客来记录我的学习历程.进入Jasperreport项目的官网发现有一个软件叫Jaspersoft studio的,它的版本也是6.3.1跟Ja ...

  5. 【Ubuntu 16】 SSH免密码登录

    免密码登录时两个机器的普通用户名都要相同,这里都是dream361 ,主机名可以不同,这里的主机名都是ubuntu 1.目前有两台机器master 和 slave 在这两台机器上都安装并启动ssh服务 ...

  6. SQLite在C#中的安装与操作

    SQLite 介绍 SQLite,是一款轻型的数据库,用于本地的数据储存. 先说说优点,它占用资源非常的低,在嵌入式设备中需要几百K的内存就够了:作为轻量级数据库,他的处理速度也足够快:支持的的容量级 ...

  7. 【渗透课程】第二篇上-http请求协议的简单描述

    HTTP协议剖析 什么是HTTP协议?如何发起请求?我认为这样讲大家能够理解: 浏览器访问网站也是http请求的一个过程.当你打开浏览器,访问一个URL (协议://服务器IP:端口/路径/文件)的时 ...

  8. batの磕磕碰碰

    前两天用kettle和存储过程实现了两个划小接口,然后用bat调用它们,在自己的xp系统上测试完全通过,没有任何问题. 然后很开心滴把成果打包给北京的同事他们使用.第二天他们跟我说无法取数,我马上就流 ...

  9. C++重写(override)、重载(overload)、重定义(redefine)以及虚函数调用

    一.基本概念 对于C++中经常出现的函数名称相同但是参数列表或者返回值不同的函数,主要存在三种情况: 1.函数重写(override) 函数重载主要实现了父类与子类之间的多态性,子类中定义与父类中名称 ...

  10. 前端开发【第4篇:JavaScript基础】

    JavaScript简述 上一篇文章已经聊过JavaScript的历史了这里不再复述了直接切入正题,JavaScript是一门解释型.动态类型.弱类型语言. 解释型语言和编译型语言就类似看一本书,编译 ...