linux驅動模型《輸入子系統》

2022-05-08 19:30:09 字數 1872 閱讀 2973

在核心**中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...