歡迎關注,每周更新!?
本合集分享的是,我當初學習Linux驅動的來時路——《《驅動之路》開篇:自序&前言》。
正文
回答3個問題:
(1)什么是 Input 子系統?
(2)為什么需要 Input 子系統?
(3)如何使用 Input 子系統?
1 什么是 Input 子系統?
Input 子系統是 Linux 內核中一套統一管理輸入設備的框架,主要是為了將鍵盤、鼠標、觸摸屏、按鍵、搖桿等各類輸入設備的硬件差異抽象化,為上層應用提供統一的輸入事件接口(如/dev/input/eventX),這樣可以避免為每種設備單獨編寫驅動程序。一句話總結其作用:“屏蔽硬件差異、提供統一接口”。
2 為什么需要 Input 子系統?
假如沒有 Input 子系統,想要使用一個輸入設備,我們需要為每一種設備單獨編寫完整的驅動程序,包括硬件初始化、數據讀取、事件解析等所有邏輯。這是由于每個輸入設備(比如 USB 鍵盤、GPIO 按鍵、I2C 觸摸屏、紅外遙控器)的通信協議、數據格式、觸發方式都不同。
另外,每新增一種輸入設備(如新型觸摸屏)時,不僅要編寫全新驅動,還可能與現有設備沖突,甚至需要修改上層應用才能適配。這樣不僅導致 Linux 內核代碼冗余嚴重,而且開發成本和維護成本極高。
面對以上種種問題,"封裝"與"分層"這兩大經典的程序設計思想再次發威,Input 子系統正是基于這樣思想設計出來解決以上問題的。
Input 子系統有如下主要作用:
硬件差異屏蔽:不同輸入設備的通信協議(如 USB、I2C、SPI、GPIO)和數據格式不同,Input 子系統通過統一的驅動模型,將底層硬件細節封裝,上層無需關心設備是 USB 鍵盤還是 GPIO 按鍵;
統一事件接口:所有輸入設備最終都通過 /dev/input/eventX節點暴露給用戶空間,應用程序可通過標準的 read ()/poll () 等系統調用讀取事件(如按鍵按下 / 松開、坐標移動、手勢等);
事件標準化:定義了統一的事件類型(如 EV_KEY、EV_ABS、EV_REL)和事件碼(如 KEY_0、ABS_X),確保不同設備的事件格式一致,上層應用可跨設備兼容。
3 如何使用 Input 子系統?
要想正確使用 Input 子系統,不得不理清其3 層架構:事件處理層、核心層以及驅動層。核心源代碼位于/drivers/input/目錄。
事件處理層(evdev.c):接收核心層轉發的事件,為上層應用提供訪問接口(如/dev/input/eventX設備節點)。
核心層(input.c):管理所有輸入設備,提供驅動注冊 / 注銷接口,轉發驅動層事件到合適的事件層。
驅動層(輸入設備驅動程序,如gpio_keys.c 等):直接操作硬件(如 GPIO 中斷、讀取電平),將硬件信號轉換為 “標準化輸入事件”。從底層硬件到上層應用鏈路如下:

從硬件底層到用戶空間數據是如何層層傳遞的?假如用戶空間直接訪問/dev/input/event0設備節點,數據的流程大致如下:
(1)用戶空間應用程序通過read()系統調用讀取/dev/input/eventX設備節點。如果此時內核輸入緩沖區中沒有可用的事件數據,該read()調用會使應用程序進入休眠狀態,等待數據到達。
(2)當用戶進行操作(如觸摸屏幕、按下按鍵)時,輸入設備的硬件會產生一個中斷信號(例如,觸摸芯片的中斷引腳電平發生變化)。
(3)當驅動程序檢測到這個電平時,輸入系統驅動層對應的驅動程序會調用中斷處理函數:讀取到數據,轉換為標準的輸入事件,向核心層匯報。
(4)Input核心層接收到事件后,會根據設備和事件的類型,上報事件層——將其分發給已注冊并匹配的事件處理器(Input Handler),例如evdev_handler。當用戶空間正在等待數據時,evdev_handler會把它喚醒,這樣用戶空間就可以獲取到硬件底層的上報數據。
最后,了解下用戶空間獲得數據的兩種方法:
直接訪問設備節點(比如/dev/input/event0,1,2,...);
通過tslib、libinput 這類庫來間接訪問設備節點,這些庫簡化了對數據的處理。
如果想繼續深入理解 Input 子系統是如何將不同輸入設備的硬件差異統一成標準的輸入事件?請聽下回分解。
(完)
本人專注 Linux 驅動 & Linux/Android BSP 開發調試,可接外包項目/技術支持/問題定位。有需求或交個朋友可加微信:【Chen_WeChat2026】。
審核編輯 黃宇
-
驅動
+關注
關注
12文章
1954瀏覽量
88522 -
Linux
+關注
關注
88文章
11758瀏覽量
219009
發布評論請先 登錄
RK3568驅動指南|第十二篇 GPIO子系統-第135章 GPIO子系統與pinctrl子系統相結合實驗
驅動之路#10:淺談 Input 子系統
評論