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

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

1.调试 键盘驱动 讲解

当我们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 /dev/event1 来调试时,如果按下按键就会打印上面input_event结构体里的数据

1.1以按开发板的按键 KEY_L,为例(因为大小端,所以数据是反着的,比如下面的数值):

# hexdump /dev/event1

/*按下时:*/
//hexdump序列号           秒             微妙         键盘事件    0x26变量      数值=1(按下)
 0000000             07c6 0000       faa2 000b     0001        0026        0001 0000
//hexdump序列号           秒         微妙             同步事件     0x00变量     数值=0
 0000010            07c6 0000     faac 000b       0000        0000         0000 0000

/*松开时:*/
//hexdump序列号          秒             微妙         键盘事件   0x26变量       数值=0(松开)
 0000020             07c6 0000     cf67 000d        0001        0026       0000 0000
//hexdump序列号          秒             微妙         同步事件   0x00变量       数值=0
 0000030             07c6 0000     cf70 000d        0000        0000       0000 0000
时间: 2025-01-03 23:52:56

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

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

linux dd命令参数及用法详解---用指定大小的块拷贝一个文件 日期:2010-06-14 点击:3830 来源: 未知 分享至: linux dd命令使用详解 dd 的主要选项: 指定数字的地方若以下列字符结尾乘以相应的数字: b=512, c=1, k=1024, w=2, xm=number m if=file 输入文件名,缺省为标准输入. of=file 输出文件名,缺省为标准输出. ibs=bytes 一次读入 bytes 个字节(即一个块大小为 bytes 个字节). obs=b

Linux tar 命令参数及用法详解--Linux打包备份命令

linux tar命令参数及用法详解--linux打包备份命令 tar命令 tar - tar 档案文件管理程序的 GNU 版本.下面将逐个介绍其含义tar [-cxtzjvfpPN] 文件与目录 ....常用参数:-c :建立一个压缩文件的参数指令(create 的意思):-x :解开一个压缩文件的参数指令!-t :查看 tarfile 里面的文件!特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!因为不可能同时压缩与解压缩.-z :是否同时具有 gzip 的属性?亦即是否需

linux cp命令参数及用法详解---linux 复制文件命令cp

linux cp命令参数及用法详解---linux 复制文件命令cp [[email protected]Linux ~]# cp [-adfilprsu] 来源档(source) 目的檔(destination)[[email protected]linux ~]# cp [options] source1 source2 source3 -. directory参数:-a :相当于 -pdr 的意思:-d :若来源文件为连结文件的属性(link file),则复制连结文件属性而非档案本身:-

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

linux traceroute命令参数及用法详解--linux跟踪路由命令 原文:http://blog.csdn.net/liyuan_669/article/details/25362505 通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径.当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的.linux系统中,我们称之为traceroute,在MS

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

fdisk 命令 linux磁盘分区管理 用途:观察硬盘之实体使用情形与分割硬盘用. 使用方法: 一.在 console 上输入 fdisk -l /dev/sda ,观察硬盘之实体使用情形. 二.在 console 上输入 fdisk /dev/sda,可进入分割硬盘模式. 1. 输入 m 显示所有命令列示. 2. 输入 p 显示硬盘分割情形. 3. 输入 a 设定硬盘启动区. 4. 输入 n 设定新的硬盘分割区. 4.1. 输入 e 硬盘为[延伸]分割区(extend). 4.2. 输入 p

linux tail命令的使用方法详解

本文介绍Linux下tail命令的使用方法. linux tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,tail会自己主动刷新,确保你看到最新的档案内容. 一.tail命令语法 tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ] 参数解释: -f 该参数用于监视File文件增长. -c

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

功能说明:显示开机信息. 语 法:dmesg [-cn][-s <缓冲区大小>] 补充说明:kernel会将开机信息存储在ring buffer中.您若是开机时来不及查看信息,可利用dmesg来查看.开机信息亦保存在/var/log目录中,名称为dmesg的文件里. 参 数: -c  显示信息后,清除ring buffer中的内容.  -s<缓冲区大小>  预设置为8196,刚好等于ring buffer的大小.  -n  设置记录信息的层级. 扩展阅读一:dmesg命令主要用途

Linux quota命令参数及用法详解---Linux磁盘配额限制设置和查看命令

功能说明:显示磁盘已使用的空间与限制. 语 法:quota [-quvV][用户名称...] 或 quota [-gqvV][群组名称...] 补充说明:执行quota指令,可查询磁盘空间的限制,并得知已使用多少空间. 参 数:  -g   列出群组的磁盘空间限制.  -q   简明列表,只列出超过限制的部分.  -u   列出用户的磁盘空间限制.  -v   显示该用户或群组,在所有挂入系统的存储设备的空间限制.  -V   显示版本信息. 在网络管理的工作中,由于硬盘的资源是有限的,常常需要

linux mkfs命令参数及用法详解---linux格式化文件系统命令(包括swap分区)

mkfs 命令  linux格式化磁盘命令 linux mkfs 指令:mkfs 使用权限 : 超级使用者 使用方式 : mkfs [-V] [-t fstype] [fs-options] filesys [blocks] [-L Lable] 说明 : 建立 linux 档案系统在特定的 partition 上 参数 : device : 预备检查的硬盘 partition,例如:/dev/sda1 -V : 详细显示模式 -t : 给定档案系统的型式,Linux 的预设值为 ext2 -c