驅動篇 Linux 輸入子系統(摘錄)

2021-10-10 20:21:07 字數 2186 閱讀 1726

linux 系統提供了 input 子系統,按鍵、觸控螢幕、鍵盤、 滑鼠等輸入都可以利用 input介面函式來實現裝置驅動

input 裝置用 input_dev 結構體描述,使用 input 子系統實現輸入裝置驅動的時候,驅動的核心工作是向系統報告按鍵、觸控螢幕、鍵盤、滑鼠等輸入事件(event,通過 input_event 結構體描述),不再需要關心檔案操作介面,因為 input子系統已經完成了檔案操作介面。驅動報告的事件經過 inputcore 和 eventhandler 最終到達使用者空間

在模組載入函式中告知 input 子系統它可以報告的事件,裝置驅動通過 set_bit

()告訴

input 子系統它支援哪些事件,如下所示:

set_bit

(ev_key, button_dev.evbit)

; 在模組載入函式中註冊輸入裝置,註冊輸入裝置的函式為:

intinput_register_device

(struct input_dev *dev)

; 在鍵被按下/抬起、觸控螢幕被觸控/抬起/移動、滑鼠被移動/單擊/抬起時通過

input_report_***

()報告發生的事件及對應的鍵值/座標等狀態。

主要的事件型別包括 ev_key(按鍵事件)、ev_rel(相對值,如游標移動,報告的是相對最後一次位置的偏移)和 ev_abs(絕對值,如觸控螢幕和操縱桿,它們工作在絕對座標系統)。

用於報告 ev_key、ev_rel 和 ev_abs 事件的函式分別為:

void

input_report_key

(struct input_dev *dev,

unsigned

int code,

intvalue)

;void

input_report_rel

(struct input_dev *dev,

unsigned

int code,

intvalue)

;void

input_report_abs

(struct input_dev *dev,

unsigned

int code,

intvalue)

;

nput_sync()用於事件同步,它告知事件的接收者驅動已經發出了乙個完整的報告。

例如,在觸控螢幕裝置驅動中,一次座標及按下狀態的整個報告過程如下:

input_report_abs

(input_dev, abs_x, x)

;//x 座標

input_report_abs

(input_dev, abs_y, y)

;//y 座標

input_report_abs

(input_dev, abs_pressure, pres)

;//壓力

input_sync

(input_dev)

;//同步

登出輸入裝置的函式為:

void

input_unregister_device

(struct input_dev *dev)

;

最簡單的 input 裝置驅動

/在按鍵中斷中報告事件/

static

void

button_interrupt

(int irq,

void

*dummy,

struct pt_regs *fp)

static

int __init button_init

(void

)//支援 ev_key 事件

button_dev.evbit[0]

=bit

(ev_key)

; button_dev.keybit[

long

(btn_0)]=

bit(btn_0)

;input_register_device

(&button_dev)

;//註冊 input 裝置

}static

void _ _exit button_exit

(void

)

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...