日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

驅(qū)動之路#10:淺談 Input 子系統(tǒng)

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

掃碼添加小助手

加入工程師交流群

歡迎關(guān)注,每周更新!?

本合集分享的是,我當(dāng)初學(xué)習(xí)Linux驅(qū)動的來時路——《《驅(qū)動之路》開篇:自序&前言》。

正文

回答3個問題:

(1)什么是 Input 子系統(tǒng)?

(2)為什么需要 Input 子系統(tǒng)?

(3)如何使用 Input 子系統(tǒng)?

1 什么是 Input 子系統(tǒng)?

Input 子系統(tǒng)是 Linux 內(nèi)核中一套統(tǒng)一管理輸入設(shè)備的框架,主要是為了將鍵盤、鼠標、觸摸屏、按鍵、搖桿等各類輸入設(shè)備的硬件差異抽象化,為上層應(yīng)用提供統(tǒng)一的輸入事件接口(如/dev/input/eventX),這樣可以避免為每種設(shè)備單獨編寫驅(qū)動程序。一句話總結(jié)其作用:“屏蔽硬件差異、提供統(tǒng)一接口”。

2 為什么需要 Input 子系統(tǒng)?

假如沒有 Input 子系統(tǒng),想要使用一個輸入設(shè)備,我們需要為每一種設(shè)備單獨編寫完整的驅(qū)動程序,包括硬件初始化、數(shù)據(jù)讀取、事件解析等所有邏輯。這是由于每個輸入設(shè)備(比如 USB 鍵盤、GPIO 按鍵、I2C 觸摸屏、紅外遙控器)的通信協(xié)議、數(shù)據(jù)格式、觸發(fā)方式都不同。

另外,每新增一種輸入設(shè)備(如新型觸摸屏)時,不僅要編寫全新驅(qū)動,還可能與現(xiàn)有設(shè)備沖突,甚至需要修改上層應(yīng)用才能適配。這樣不僅導(dǎo)致 Linux 內(nèi)核代碼冗余嚴重,而且開發(fā)成本和維護成本極高。

面對以上種種問題,"封裝"與"分層"這兩大經(jīng)典的程序設(shè)計思想再次發(fā)威,Input 子系統(tǒng)正是基于這樣思想設(shè)計出來解決以上問題的。

Input 子系統(tǒng)有如下主要作用:

硬件差異屏蔽:不同輸入設(shè)備的通信協(xié)議(如 USB、I2C、SPI、GPIO)和數(shù)據(jù)格式不同,Input 子系統(tǒng)通過統(tǒng)一的驅(qū)動模型,將底層硬件細節(jié)封裝,上層無需關(guān)心設(shè)備是 USB 鍵盤還是 GPIO 按鍵;

統(tǒng)一事件接口:所有輸入設(shè)備最終都通過 /dev/input/eventX節(jié)點暴露給用戶空間,應(yīng)用程序可通過標準的 read ()/poll () 等系統(tǒng)調(diào)用讀取事件(如按鍵按下 / 松開、坐標移動、手勢等);

事件標準化:定義了統(tǒng)一的事件類型(如 EV_KEY、EV_ABS、EV_REL)和事件碼(如 KEY_0、ABS_X),確保不同設(shè)備的事件格式一致,上層應(yīng)用可跨設(shè)備兼容。

3 如何使用 Input 子系統(tǒng)?

要想正確使用 Input 子系統(tǒng),不得不理清其3 層架構(gòu):事件處理層、核心層以及驅(qū)動層。核心源代碼位于/drivers/input/目錄。

事件處理層(evdev.c):接收核心層轉(zhuǎn)發(fā)的事件,為上層應(yīng)用提供訪問接口(如/dev/input/eventX設(shè)備節(jié)點)。

核心層(input.c):管理所有輸入設(shè)備,提供驅(qū)動注冊 / 注銷接口,轉(zhuǎn)發(fā)驅(qū)動層事件到合適的事件層。

驅(qū)動層(輸入設(shè)備驅(qū)動程序,如gpio_keys.c 等):直接操作硬件(如 GPIO 中斷、讀取電平),將硬件信號轉(zhuǎn)換為 “標準化輸入事件”。從底層硬件到上層應(yīng)用鏈路如下:

wKgZPGmmKTKAck2TAABhaKdwoW4590.png

從硬件底層到用戶空間數(shù)據(jù)是如何層層傳遞的?假如用戶空間直接訪問/dev/input/event0設(shè)備節(jié)點,數(shù)據(jù)的流程大致如下:

(1)用戶空間應(yīng)用程序通過read()系統(tǒng)調(diào)用讀取/dev/input/eventX設(shè)備節(jié)點。如果此時內(nèi)核輸入緩沖區(qū)中沒有可用的事件數(shù)據(jù),該read()調(diào)用會使應(yīng)用程序進入休眠狀態(tài),等待數(shù)據(jù)到達。

(2)當(dāng)用戶進行操作(如觸摸屏幕、按下按鍵)時,輸入設(shè)備的硬件會產(chǎn)生一個中斷信號(例如,觸摸芯片的中斷引腳電平發(fā)生變化)。

(3)當(dāng)驅(qū)動程序檢測到這個電平時,輸入系統(tǒng)驅(qū)動層對應(yīng)的驅(qū)動程序會調(diào)用中斷處理函數(shù):讀取到數(shù)據(jù),轉(zhuǎn)換為標準的輸入事件,向核心層匯報。

(4)Input核心層接收到事件后,會根據(jù)設(shè)備和事件的類型,上報事件層——將其分發(fā)給已注冊并匹配的事件處理器(Input Handler),例如evdev_handler。當(dāng)用戶空間正在等待數(shù)據(jù)時,evdev_handler會把它喚醒,這樣用戶空間就可以獲取到硬件底層的上報數(shù)據(jù)。

最后,了解下用戶空間獲得數(shù)據(jù)的兩種方法:

直接訪問設(shè)備節(jié)點(比如/dev/input/event0,1,2,...);

通過tslib、libinput 這類庫來間接訪問設(shè)備節(jié)點,這些庫簡化了對數(shù)據(jù)的處理。

如果想繼續(xù)深入理解 Input 子系統(tǒng)是如何將不同輸入設(shè)備的硬件差異統(tǒng)一成標準的輸入事件?請聽下回分解。

(完)

本人專注 Linux 驅(qū)動 & Linux/Android BSP 開發(fā)調(diào)試,可接外包項目/技術(shù)支持/問題定位。有需求或交個朋友可加微信:【Chen_WeChat2026】。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 驅(qū)動
    +關(guān)注

    關(guān)注

    12

    文章

    1994

    瀏覽量

    88727
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11821

    瀏覽量

    219598
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    驅(qū)動之路#20:Pinctrl 在手,引腳復(fù)用很順手

    : 步驟 2:內(nèi)核解析設(shè)備樹,初始化引腳配置 Linux 內(nèi)核啟動時,Pinctrl 子系統(tǒng)會執(zhí)行以下操作: 解析i2c0)綁定,等待驅(qū)動使
    的頭像 發(fā)表于 04-07 21:18 ?500次閱讀
    <b class='flag-5'>驅(qū)動</b><b class='flag-5'>之路</b>#20:Pinctrl 在手,引腳復(fù)用很順手

    AD9864中頻數(shù)字化子系統(tǒng)數(shù)據(jù)手冊解讀

    AD9864中頻數(shù)字化子系統(tǒng)數(shù)據(jù)手冊解讀 一、引言 在當(dāng)今的通信和電子領(lǐng)域,中頻數(shù)字化子系統(tǒng)扮演著至關(guān)重要的角色。AD9864作為一款通用的中頻子系統(tǒng),能夠?qū)?b class='flag-5'>10 MHz至300 MH
    的頭像 發(fā)表于 04-03 09:05 ?125次閱讀

    驅(qū)動之路#03:LCD 時序參數(shù)分析

    ? 題圖:浙江普陀山客運中心最近獲得2021年度凡爾賽建筑獎。 歡迎關(guān)注,每周更新!? 本合集分享的是,我當(dāng)初學(xué)習(xí)Linux驅(qū)動的來時路——《《驅(qū)動之路》開篇:自序13 tvb: 垂直上寬/后肩
    的頭像 發(fā)表于 02-10 08:27 ?2889次閱讀
    <b class='flag-5'>驅(qū)動</b><b class='flag-5'>之路</b>#03:LCD 時序參數(shù)分析

    RDMA設(shè)計37:RoCE v2 子系統(tǒng)模型設(shè)計

    本博文主要交流設(shè)計思路,在本博客已給出相關(guān)博文160多篇,希望對初學(xué)者有用。注意這里只是拋磚引玉,切莫認為參考這就可以完成商用IP設(shè)計。 RoCE v2 子系統(tǒng)模型是用來模擬 RoCE v2 功能
    發(fā)表于 02-06 16:19

    家電電子系統(tǒng)設(shè)計:Littelfuse技術(shù)方案解析

    家電電子系統(tǒng)設(shè)計:Littelfuse技術(shù)方案解析 在當(dāng)今家電市場,技術(shù)的飛速發(fā)展促使家電不斷智能化、高效化和安全化。作為電子工程師,我們在設(shè)計家電電子系統(tǒng)時,需要綜合考慮市場趨勢、技術(shù)應(yīng)用以及產(chǎn)品
    的頭像 發(fā)表于 12-16 09:50 ?666次閱讀

    驅(qū)動隔離芯片:電子系統(tǒng)的安全與效能守護者

    在當(dāng)今科技飛速發(fā)展的時代,電子系統(tǒng)的復(fù)雜性和集成度不斷提升,對信號傳輸?shù)陌踩?、穩(wěn)定性和高效性提出了前所未有的挑戰(zhàn)。從工業(yè)自動化的精密控制到新能源汽車的動力管理,從通信網(wǎng)絡(luò)的高速數(shù)據(jù)傳輸?shù)结t(yī)療設(shè)備的精準監(jiān)測,驅(qū)動隔離芯片作為電子系統(tǒng)
    的頭像 發(fā)表于 10-25 15:19 ?790次閱讀

    Fakra接口標準以及它能為汽車電子系統(tǒng)帶來什么

    Fakra接口標準是一種全球通用的汽車電子系統(tǒng)連接技術(shù),它的主要作用是為汽車電子系統(tǒng)提供一種可靠的、全球通用的接口標準。它能夠提高汽車電子系統(tǒng)的可靠性、整體性能和靈活性,使汽車電子系統(tǒng)
    的頭像 發(fā)表于 09-17 14:50 ?3884次閱讀
    Fakra接口標準以及它能為汽車電<b class='flag-5'>子系統(tǒng)</b>帶來什么

    基于 ROS + ADI 芯片方案 的 人形機器人子系統(tǒng)級BOM清單(以腿部子系統(tǒng)為例)

    基于 ROS + ADI 芯片方案 的 人形機器人子系統(tǒng)級BOM清單 (以 腿部子系統(tǒng) 為例),包括核心感知、執(zhí)行與通信模塊,配合主控系統(tǒng)通過 ROS2 實現(xiàn)分布式控制與狀態(tài)反饋。 一、腿部
    的頭像 發(fā)表于 06-17 17:06 ?2323次閱讀

    迅為RK3568開發(fā)板新增topeet子系統(tǒng)-在產(chǎn)品中新增子系統(tǒng)

    build/subsystem_config.json文件中增加名為topeet的子系統(tǒng),在3.4節(jié)已經(jīng)新建了topeet 文件夾存放子系統(tǒng)代碼。添加 topeet 子系統(tǒng)進行一個登記,說明
    發(fā)表于 06-16 10:43

    RK3568驅(qū)動指南|第十二篇 GPIO子系統(tǒng)-第130章 GPIO的調(diào)試方法

    RK3568驅(qū)動指南|第十二篇 GPIO子系統(tǒng)-第130章 GPIO的調(diào)試方法
    的頭像 發(fā)表于 06-03 11:32 ?1484次閱讀
    RK3568<b class='flag-5'>驅(qū)動</b>指南|第十二篇 GPIO<b class='flag-5'>子系統(tǒng)</b>-第130章 GPIO的調(diào)試方法

    迅為RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入

    迅為RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入
    的頭像 發(fā)表于 05-29 14:05 ?1219次閱讀
    迅為RK3568開發(fā)板<b class='flag-5'>驅(qū)動</b>指南GPIO<b class='flag-5'>子系統(tǒng)</b>GPIO<b class='flag-5'>子系統(tǒng)</b>API函數(shù)的引入

    迅為RK3568驅(qū)動指南GPIO子系統(tǒng) GPIO操作函數(shù)實驗

    迅為電子RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng) GPIO操作函數(shù)實驗
    的頭像 發(fā)表于 05-28 15:24 ?1547次閱讀
    迅為RK3568<b class='flag-5'>驅(qū)動</b>指南GPIO<b class='flag-5'>子系統(tǒng)</b> GPIO操作函數(shù)實驗

    迅為RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng)三級節(jié)點操作函數(shù)實驗

    迅為RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng)三級節(jié)點操作函數(shù)實驗
    的頭像 發(fā)表于 05-26 15:39 ?1698次閱讀
    迅為RK3568開發(fā)板<b class='flag-5'>驅(qū)動</b>指南GPIO<b class='flag-5'>子系統(tǒng)</b>三級節(jié)點操作函數(shù)實驗

    RK3568驅(qū)動指南|第十二篇 GPIO子系統(tǒng)-第135章 GPIO子系統(tǒng)與pinctrl子系統(tǒng)相結(jié)合實驗

    RK3568驅(qū)動指南|第十二篇 GPIO子系統(tǒng)-第135章 GPIO子系統(tǒng)與pinctrl子系統(tǒng)相結(jié)合實驗
    的頭像 發(fā)表于 05-23 13:47 ?1225次閱讀
    RK3568<b class='flag-5'>驅(qū)動</b>指南|第十二篇 GPIO<b class='flag-5'>子系統(tǒng)</b>-第135章 GPIO<b class='flag-5'>子系統(tǒng)</b>與pinctrl<b class='flag-5'>子系統(tǒng)</b>相結(jié)合實驗

    迅為RK3568驅(qū)動指南GPIO子系統(tǒng)實戰(zhàn):實現(xiàn)動態(tài)切換引腳復(fù)用功能

    迅為RK3568驅(qū)動指南GPIO子系統(tǒng)實戰(zhàn):實現(xiàn)動態(tài)切換引腳復(fù)用功能
    的頭像 發(fā)表于 05-22 14:27 ?2398次閱讀
    迅為RK3568<b class='flag-5'>驅(qū)動</b>指南GPIO<b class='flag-5'>子系統(tǒng)</b>實戰(zhàn):實現(xiàn)動態(tài)切換引腳復(fù)用功能
    墨竹工卡县| 呼和浩特市| 旌德县| 武鸣县| 滕州市| 简阳市| 临汾市| 沙田区| 通榆县| 桐城市| 沂南县| 郧西县| 南靖县| 太保市| 巴中市| 泗洪县| 华宁县| 沁阳市| 吉林市| 两当县| 株洲县| 泸水县| 宝应县| 商河县| 湘乡市| 旺苍县| 阿克苏市| 保靖县| 营山县| 宁南县| 晋城| 福州市| 淮南市| 钦州市| 祁阳县| 漳平市| 体育| 黄骅市| 特克斯县| 南川市| 平遥县|