在核心**中drive部分已經為我們寫好了,你也可以自己寫,我一般用的是evdev.c這個檔案裡面的**。我們所要做的就是編寫device裡面的**。這樣就可以減輕程式設計師的編寫負擔。免得每次寫驅動程式都要編寫與硬體無關的程式。
下面看我寫的device部分的**:
1 #include 2 #include 3以上的程式沒有什麼太大的難點,但是細細研究還是有很多東西值得我們去研究的。4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16
17 #include 18 #include 19 #include 20
//////////////這裡宣告了乙個結構體指標 為構建整套系統所必須的
21static
struct input_dev *buttons_dev;
22 //////////////定義了乙個時鐘的結構體,程式裡面關鍵是為了防抖
23static
struct
timer_list buttons_timer;
24//////////////////////////
25static
struct pin_desc *irq_pd;
26/////////////////這個結構體儲存了一些必要的資料
27struct
pin_desc;
3334
struct pin_desc pins_desc[4] =,
36 ,
37 ,
38 ,
39};
40 /////////中斷處理函式 裡面主要是設定定時器的時鐘 用來防抖
41static irqreturn_t buttons_irq(int irq, void *dev_id)
4247
//////////此函式為定時器函式 定時的時間到了後這個函式被執行 主要用於檢測按鍵被按下 然後上報事件
48static
void buttons_timer_function(unsigned long
data)
4965
else
6671
72return;73
}7475//////////各種初始化 關於input_dev結構體的分配 和賦值什麼的 這個關鍵是要看input.c裡面的內容
76static
int buttons_init(void)77
106107
return0;
108109
}110
///////////這個函式就是各種解除安裝啦
111static
void buttons_exit(void
)112
118119 del_timer(&buttons_timer);
120input_unregister_device(buttons_dev);
121input_free_device(buttons_dev);
122123
return
;124
}125
126module_init(buttons_init);
127module_exit(buttons_exit);
128 module_license("
gpl");
我們研究的只是device這部分的**,要深入的理解還是要看核心原始碼啊。
linux驅動子系統之輸入子系統 5
5.總結 5.1 事件資訊的上報過程分析 l 上報的大致過程 裝置驅動層 核心層 事件處理層 應用層 l 具體呼叫的函式 以evdev為例 input event input handle event input pass event handle handler event handle,type...
linux裝置驅動 輸入子系統
輸入裝置都能用輸入子系統來寫,比如說按鍵 觸控螢幕 滑鼠等,但是有的輸入裝置不止用到了輸入子系統,比如說usb輸入裝置,他們還用到了usb子系統。我們以最簡單的按鍵 直接接到cpu上 為例介紹一下輸入子系統。輸入子系統將硬體相關的 與軟體相關的 分開寫,目的是為了以後編寫修改 簡便。軟體部分系統已經...
linux驅動之輸入子系統
輸入子系統框架,把核心開啟 搜尋input.c 輸入子系統的 在 driver input目錄下面 最上一層,我們稱它為核心層 要看乙個驅動程式我們應該從他的入口函式開始看 有一行 err register chrdev region mkdev input major,0 input max ch...