有關輸入子系統我們可以參考 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...