驅動程式之 1 字元裝置 9 輸入子系統 2

2021-09-09 07:19:26 字數 1371 閱讀 1998

本文中input_handler層使用evdev,在input_dev層編寫按鍵例項

基本流程:

1、編寫入口函式,分配、設定、註冊input_dev結構體,並且完成硬體初始化

2、編寫出口函式,完成與入口函式相反的操作

3、宣告、定義硬體相關結構體和定時器

4、編寫按鍵中斷服務程式

5、編寫定時器中斷服務程式,定時時間為10ms,用於消抖

6、新增相關標頭檔案

附上完整**

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* 結構體的宣告和定義 */

typedef structbuttons_desc, *pbuttons_desc;

buttons_desc g_tbuttonsdesc[4] = ,,

,,};static struct input_dev *g_ptbuttonsdev;

static struct timer_list g_tbuttonstimer;

static pbuttons_desc g_ptbuttonsdescselect;

/* 定時器中斷服務程式 */

static void buttons_timer_isr(unsigned long data)

else }

/* 按鍵中斷服務程式 */

static irqreturn_t buttons_isr(int irq, void *dev_id)

/* 入口函式 */

static int input_init(void)

/* 出口函式 */

static void input_exit(void)

module_init(input_init);

module_exit(input_exit);

module_license("gpl");

測試方法:

cat /dev/event*

載入驅動裝置,再次cat /dev/event*,會多出乙個event

1、hexdump /dev/event1(event1是載入驅動裝置後新出現的event,根據實際情況修改),按下按鍵會回顯按鍵事件的時間、鍵值碼、型別等資訊

2、cat /dev/tty1,按下字母按鍵,再按下回車按鍵,會回顯字母資訊,由於使能了rep事件,所以按鍵長按有效

3、exec 0

驅動程式之 1 字元裝置 1

linux裝置驅動分三種,包括字元裝置驅動 塊裝置驅動和網路裝置驅動 其中本文講的字元裝置 如lcd 觸控螢幕等 只能按位元組流先後順序訪問裝置記憶體,不能隨機訪問 字元裝置的基本框架比較簡單 載入驅動時,呼叫入口函式 解除安裝驅動時,呼叫出口函式 應用程式開啟驅動裝置時,呼叫open函式 應用程式...

驅動程式之 1 字元裝置 3

基本排程關係 在應用程式中呼叫poll poll呼叫sys poll sys poll呼叫do sys poll do sys poll呼叫do poll do poll呼叫do pollfd do pollfd呼叫我們的驅動程式實現的my irq drv poll,my irq drv poll呼...

驅動程式之 1 字元裝置 7

阻塞操作 是指在執行裝置操作時若不能獲得資源則掛起程序,直到滿足可操作的條件後再進行操作。被掛起的程序進入休眠狀態,被從排程器的執行佇列移走,直到等待的條件被滿足。非阻塞操作 程序在不能進行裝置操作時並不掛起,它或者放棄,或者不停地查詢,直至可以進行操作為止。驅動程式中 如果是以非阻塞方式開啟檔案,...