一、input子系統(tǒng)核心設(shè)計(jì):統(tǒng)一輸入設(shè)備的標(biāo)準(zhǔn)化框架。
Linux input子系統(tǒng)的核心目標(biāo)是為按鍵、鼠標(biāo)、鍵盤(pán)、觸摸屏等輸入設(shè)備建立統(tǒng)一的管理框架,它的核心設(shè)計(jì)體現(xiàn)在兩大方面:
- 設(shè)計(jì)目的:屏蔽硬件差異,簡(jiǎn)化驅(qū)動(dòng)與應(yīng)用解耦
- 統(tǒng)一管理輸入設(shè)備:無(wú)論底層硬件是GPIO按鍵、USB鍵盤(pán)還是觸摸芯片,輸入設(shè)備都?xì)w入該子系統(tǒng)統(tǒng)一管理,避免為每個(gè)設(shè)備單獨(dú)設(shè)計(jì)驅(qū)動(dòng)邏輯。
- 抽象硬件細(xì)節(jié):驅(qū)動(dòng)開(kāi)發(fā)者無(wú)需關(guān)注應(yīng)用層如何解析事件,僅需按規(guī)范采集硬件數(shù)據(jù);應(yīng)用層也無(wú)需適配不同硬件的具體邏輯,只需讀取標(biāo)準(zhǔn)化的輸入事件即可,實(shí)現(xiàn)硬件驅(qū)動(dòng)與上層應(yīng)用的徹底解耦。
- 架構(gòu)分層:驅(qū)動(dòng)層、核心層、事件層的分工協(xié)作
input子系統(tǒng)采用三層架構(gòu),各層職責(zé)明確,形成“采集-管理-交付”的完整流程:
- 驅(qū)動(dòng)層:負(fù)責(zé)與硬件交互,是整個(gè)框架的“數(shù)據(jù)源頭”。比如GPIO按鍵驅(qū)動(dòng),會(huì)讀取引腳電平、觸發(fā)中斷,將采集到的原始數(shù)據(jù)轉(zhuǎn)化為標(biāo)準(zhǔn)化的輸入事件,上報(bào)給核心層。
- 核心層(input core):承擔(dān)核心統(tǒng)籌工作,是連接驅(qū)動(dòng)層與事件層的“橋梁”。它為驅(qū)動(dòng)提供設(shè)備注冊(cè)、注銷的標(biāo)準(zhǔn)化接口,管理所有input設(shè)備的生命周期,同時(shí)負(fù)責(zé)將驅(qū)動(dòng)上報(bào)的事件轉(zhuǎn)發(fā)給事件層。
- 事件處理層:作為與用戶空間的“接口層”,其核心任務(wù)是將核心層傳遞的事件轉(zhuǎn)換為用戶空間可識(shí)別的格式。最終在
/dev/input目錄下生成eventX(X為編號(hào))設(shè)備文件,所有輸入設(shè)備的操作都圍繞這些文件展開(kāi)。
整個(gè)框架最關(guān)鍵的一個(gè)核心約束是:所有input設(shè)備的主設(shè)備號(hào)固定為13。這個(gè)統(tǒng)一標(biāo)識(shí)讓系統(tǒng)無(wú)需為每個(gè)輸入設(shè)備單獨(dú)分配設(shè)備號(hào),驅(qū)動(dòng)只需注冊(cè)input設(shè)備,系統(tǒng)就能自動(dòng)歸入該主設(shè)備號(hào)下的管理范疇,大幅提升了設(shè)備的管理效率和兼容性。