轉自: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