Linux-hexdump命令調(diào)試event驅(qū)動(dòng)

hexdump: 查看文件的內(nèi)容,比如二進(jìn)制文件中包含的某些字符串,通常用來調(diào)試驅(qū)動(dòng)用
描述
我們以event1為例,當(dāng)我們insmod掛載了鍵盤驅(qū)動(dòng)后,出現(xiàn)一個(gè)event1設(shè)備,
此時(shí)沒有按鍵按下,所以event1里面的數(shù)據(jù)是沒有的,那么數(shù)據(jù)又是從來哪里來?
通過鍵盤驅(qū)動(dòng)的read函數(shù),若有按鍵按下,就會(huì)上傳按鍵數(shù)據(jù)給用戶層hexdump
因?yàn)殒I盤驅(qū)動(dòng)的input_handler 是:evdev_handler
所以鍵盤驅(qū)動(dòng)的read函數(shù)是: evdev_handler->evdev_fops->evdev_read
進(jìn)入evdev_read()函數(shù),如下圖所示:

struct input_event event;
while (retval + input_event_size() <= count &&
       evdev_fetch_next_event(client, &event)) {

    if (input_event_to_user(buffer + retval, &event))
        return -EFAULT;

evdev_event_to_user()這個(gè)函數(shù)從字面上來看,顯然就是用來上傳給用戶層的函數(shù),其中buffer是函數(shù)參數(shù),指向用戶層,所以數(shù)據(jù)就是event.

我們來看看event的結(jié)構(gòu)體:input_event

struct input_event {
struct timeval time;  //事件發(fā)生的時(shí)間
    __u16 type;            //  哪類事件, 比如鍵盤事件
  __u16 code;     // 對(duì)應(yīng)的事件里支持的哪個(gè)變量,比如按鍵K
  __s32 value;   // 對(duì)應(yīng)的變量里的數(shù)值, 比如松開按鍵則是1,反之為0
};

把 time里的成員展開如下:

struct input_event {
   long   tv_sec; /* seconds */          //秒
   long   tv_usec;    /* microseconds */     //微妙

   __u16 type;            //  哪類事件, 比如鍵盤事件
   __u16 code;     // 對(duì)應(yīng)的事件里支持的哪個(gè)變量,比如按鍵K
  __s32 value;   // 對(duì)應(yīng)的變量里的數(shù)值, 比如松開按鍵則是1,反之為0
};

所以我們hexdump調(diào)試任何輸入子系統(tǒng)event XX驅(qū)動(dòng)時(shí),有信息就會(huì)打印上面數(shù)據(jù)
1.調(diào)試鍵盤驅(qū)動(dòng)
以按開發(fā)板的按鍵 KEY_L,為例(因?yàn)閿?shù)據(jù)是從低到高打印的,所以數(shù)據(jù)是反的):


2.調(diào)試觸摸屏驅(qū)動(dòng)

也可以使用getevent 命令,用于獲取 input 輸入事件,比如獲取按鍵上報(bào)信息、獲取觸摸屏上報(bào)信息等。

格式輸出為event type、event code、event value
比如 EV_KEY 330 0 表示: 按鍵事件的BTN_TOUCH觸摸按鍵(ox14a) 松開了(0) EV_ABS 1 72 表示: 絕對(duì)坐標(biāo)事件的ABS_Y(1)坐標(biāo)位于72

這些定義都在input.h里,比如EV_ABS的code有:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容