Linux-hexdump命令調試event驅動

轉自:https://blog.csdn.net/xiaodingqq/article/details/80807145

hexdump:查看文件的內容,比如二進制文件中包含的某些字符串,通常用來調試用

描述:

我們以event1爲例子,當我們insmod掛載了鍵盤驅動後,出現一個event1設備,

此時沒有按鍵按下,所以event1裏面的數據是沒有的,那麼數據又是從哪裏來的呢?

通過鍵盤驅動的read函數,若有按鍵按下,就會上傳按鍵數據給用戶層的hexdump

因爲鍵盤驅動的input_handler是:evdev_handler

所以鍵盤驅動的read函數是:evdev_hanler->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、調試鍵盤驅動

(鍵盤驅動代碼:https://blog.csdn.net/xiaodingqq/article/details/80415082)

以按開發板的按鍵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、調試觸摸屏驅動

(觸摸屏驅動代碼:https://blog.csdn.net/xiaodingqq/article/details/80801347)

/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


————————————————
版權聲明:本文爲CSDN博主「mainn」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/xiaodingqq/article/details/80807145

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章