国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

驅動之路#10:淺談 Input 子系統

BSP調試從0到1 ? 來源:嵌入式分享 ? 作者:嵌入式分享 ? 2026-03-03 08:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

歡迎關注,每周更新!?

本合集分享的是,我當初學習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 中斷、讀取電平),將硬件信號轉換為 “標準化輸入事件”。從底層硬件到上層應用鏈路如下:

wKgZPGmmKTKAck2TAABhaKdwoW4590.png

從硬件底層到用戶空間數據是如何層層傳遞的?假如用戶空間直接訪問/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子系統GPIO子系統API函數的引入

    迅為RK3568開發板驅動指南GPIO子系統GPIO子系統API函數的引入
    的頭像 發表于 05-29 14:05 ?1014次閱讀
    迅為RK3568開發板<b class='flag-5'>驅動</b>指南GPIO<b class='flag-5'>子系統</b>GPIO<b class='flag-5'>子系統</b>API函數的引入

    迅為RK3568驅動指南GPIO子系統 GPIO操作函數實驗

    迅為電子RK3568開發板驅動指南GPIO子系統 GPIO操作函數實驗
    的頭像 發表于 05-28 15:24 ?1331次閱讀
    迅為RK3568<b class='flag-5'>驅動</b>指南GPIO<b class='flag-5'>子系統</b> GPIO操作函數實驗

    RK3568驅動指南|第十二篇 GPIO子系統-第135章 GPIO子系統與pinctrl子系統相結合實驗

    RK3568驅動指南|第十二篇 GPIO子系統-第135章 GPIO子系統與pinctrl子系統相結合實驗
    的頭像 發表于 05-23 13:47 ?1015次閱讀
    RK3568<b class='flag-5'>驅動</b>指南|第十二篇 GPIO<b class='flag-5'>子系統</b>-第135章 GPIO<b class='flag-5'>子系統</b>與pinctrl<b class='flag-5'>子系統</b>相結合實驗

    迅為RK3568驅動指南GPIO子系統實戰:實現動態切換引腳復用功能

    迅為RK3568驅動指南GPIO子系統實戰:實現動態切換引腳復用功能
    的頭像 發表于 05-22 14:27 ?2088次閱讀
    迅為RK3568<b class='flag-5'>驅動</b>指南GPIO<b class='flag-5'>子系統</b>實戰:實現動態切換引腳復用功能

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-input子系統之基于input子系統的光線傳感器驅動

    光照強度測量的應用,包括自動調光系統、室內照明控制、移動設備和環境監測等。 驅動編寫 例程代碼路徑:ELF 1開發板資料包\\03-例程源碼\\03-2 驅動例程源碼\\08_input
    發表于 04-16 11:05

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-input子系統之基于input子系統的按鍵驅動

    例程代碼路徑:ELF 1開發板資料包\\03-例程源碼\\03-2 驅動例程源碼\\08_input子系統\\keyboard下面以控制開發板上的K2為例進行講解。修改設備樹(一)查看原理圖和引腳
    發表于 04-16 10:57

    飛凌嵌入式ElfBoard ELF 1板卡-input子系統之基于input子系統的光線傳感器驅動

    的應用,包括自動調光系統、室內照明控制、移動設備和環境監測等。驅動編寫例程代碼路徑:ELF 1開發板資料包\\03-例程源碼\\03-2 驅動例程源碼\\08_input
    發表于 04-16 10:39

    飛凌嵌入式ElfBoard ELF 1板卡-input子系統之基于input子系統的按鍵驅動

    例程代碼路徑:ELF 1開發板資料包\\03-例程源碼\\03-2 驅動例程源碼\\08_input子系統\\keyboard下面以控制開發板上的K2為例進行講解。修改設備樹(一)查看原理圖和引腳
    發表于 04-15 10:58

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-input子系統input子系統簡單構建流程

    _driver的輸入設備驅動程序,它使用Input子系統提供的API來創建和注冊輸入設備。在驅動程序的初始化函數my_input_drive
    發表于 04-15 10:54

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-input子系統input子系統簡介

    使用了設備驅動程序來管理輸入設備。每個輸入設備都由一個驅動程序進行控制,驅動程序負責與硬件進行通信并將輸入事件傳遞給Input子系統。輸入事
    發表于 04-15 10:42

    飛凌嵌入式ElfBoard ELF 1板卡-input子系統input子系統簡單構建流程

    _driver的輸入設備驅動程序,它使用Input子系統提供的API來創建和注冊輸入設備。在驅動程序的初始化函數my_input_drive
    發表于 04-15 10:29

    飛凌嵌入式ElfBoard ELF 1板卡-input子系統input子系統簡介

    使用了設備驅動程序來管理輸入設備。每個輸入設備都由一個驅動程序進行控制,驅動程序負責與硬件進行通信并將輸入事件傳遞給Input子系統。輸入事
    發表于 04-15 10:27

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-Pinctrl和GPIO子系統之GPIO子系統

    GPIO(General Purpose Input/Output)子系統是用于控制和管理通用輸入/輸出引腳的一部分。它提供了一種標準化的方式來訪問和操作硬件平臺上的GPIO引腳,使開發人員能夠通過
    發表于 03-25 13:29

    飛凌嵌入式ElfBoard ELF 1板卡-Pinctrl和GPIO子系統之GPIO子系統

    GPIO(General Purpose Input/Output)子系統是用于控制和管理通用輸入/輸出引腳的一部分。它提供了一種標準化的方式來訪問和操作硬件平臺上的GPIO引腳,使開發人員能夠通過
    發表于 03-24 15:41

    飛凌嵌入式ElfBoard ELF 1板卡-Pinctrl和GPIO子系統之Pinctrl子系統

    pinctrl(Pin Control)子系統是Linux內核中的一個模塊化子系統,用于管理和控制硬件引腳(Pin)的配置和功能。它提供了一種統一的接口,使驅動程序可以對硬件引腳進行靈活的配置和控制
    發表于 03-22 09:23