按鍵驅動之使用輸入子系統架構

2021-07-27 20:39:29 字數 2554 閱讀 2752

有關輸入子系統我們可以參考 gpio_keys.c這個**,注:這只是乙個例子,沒有實際的作用

static struct input_dev *button_dev

/*1.分配乙個input_device結構體*/

/*參考gpio_keys.c這個例子,可以知道其分配函式是input_allocate_device*/

/*2. 設定*/

/*怎麼設定呢,我們來看看這個結構體裡面有什麼東西*/

static int button_init(void)

;static const struct input_device_id evdev_ids = ,/* matches all devices */

,/* terminating zero entry */

}; 看這個注釋,匹配所有的裝置,當然可以支援我們的按鍵,然後呼叫connect函式

for (minor = 0; minor < evdev_minors; minor++)    //尋找乙個次裝置號  次裝置號從**開始,

if (!evdev_table[minor])

break;

if (minor == evdev_minors)

evdev->dev.devt = mkdev(input_major, evdev_minor_base + minor); 

我們載入驅動之後

cat /dev/tty1 

用hexdump /dev/event1

按下四個按鍵可以看到一些數字 如圖

0000000 061e 0000 7018 0006 0001 002a 0001 0000

0000010 061e 0000 7024 0006 0000 0000 0000 0000

0000020 061e 0000 f495 0009 0001 002a 0000 0000

0000030 061e 0000 f4a4 0009 0000 0000 0000 0000

0000040 061f 0000 f2ed 000d 0001 001c 0001 0000

0000050 061f 0000 f2fd 000d 0000 0000 0000 0000

0000060 0620 0000 9f7e 0002 0001 001c 0000 0000

0000070 0620 0000 9f87 0002 0000 0000 0000 0000

hexdump 

hex是16進製制 dump就是顯示

這個就是讀/dev/event1這個裝置把裡面的資料顯示出來

0000000 061e 0000 7018 0006 0001 002a 0001 0000

前面0000000 這可以省略 ,後面的就是資料 061e 0000 這四個位元組表示秒  7018 0006這四個位元組表示微秒  0001 表示類  002a表示code  

0001 0000表示value 

0000010 061e 0000 7024 0006 0000 0000 0000 0000這表示同步類事件

那些值分別代表什麼意思是怎麼知道的 看input_event的定義

還一種方法就是 cat /dev/tty1

ls 後面回車

驅動**如下

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

static struct input_dev *button_dev;

struct pin_desc;

struct pin_desc pins_desc[4] = ,,,

,};static struct pin_desc *irq_pd;

static struct timer_list buttons_timer;

static irqreturn_t buttons_irq(int irq, void *dev_id)

static void buttons_timer_function(unsigned long data)

else

}static int button_init(void)

return 0;

}static void button_exit(void)

del_timer(&buttons_timer);

input_unregister_device(button_dev);

input_free_device(button_dev);

}module_init(button_init);

module_exit(button_exit);

module_license("gpl");

module_author("eight");

linux輸入子系統之按鍵驅動

上一節中,我們講解了linux input子系統的框架,到核心原始碼裡詳細分析了輸入子系統的分離分層的框架等。這一節,我們來以輸入子系統的框架來寫乙個按鍵驅動。問 怎麼寫符合輸入子系統框架的驅動程式?答 1.分配乙個input dev結構體 2.設定 3.註冊 4.硬體相關的 比如在中斷服務程式裡上...

020 linux驅動之 輸入子系統按鍵應用

一 分配乙個輸入子系統結構體 static struct input dev buttons dev 分配乙個input dev結構體 二 設定這個輸入子系統需要的動作 1.分配乙個input dev結構體 buttons dev input allocate device 使用這個函式分配乙個in...

linux驅動子系統之輸入子系統 5

5.總結 5.1 事件資訊的上報過程分析 l 上報的大致過程 裝置驅動層 核心層 事件處理層 應用層 l 具體呼叫的函式 以evdev為例 input event input handle event input pass event handle handler event handle,type...