本合集分享的是,我當(dāng)初學(xué)習(xí)Linux驅(qū)動(dòng)的來(lái)時(shí)路——《《驅(qū)動(dòng)之路》開(kāi)篇:自序&前言》。
正文
經(jīng)過(guò)前面 Input 子系統(tǒng)系列文章,我們已經(jīng)很清楚 Input 子系統(tǒng)的數(shù)據(jù)上報(bào)流程(如下圖),這正是我們調(diào)試 Input 設(shè)備時(shí)的技術(shù)自信。Input設(shè)備的工作鏈路很簡(jiǎn)單: 硬件→ 驅(qū)動(dòng)→ Linux Input子系統(tǒng) → 應(yīng)用層,調(diào)試的核心就是“從下到上”驗(yàn)證每一環(huán)是否正常,哪環(huán)斷了就針對(duì)性解決。

下面跟大家分享我的 Input 設(shè)備調(diào)試思路,僅供參考~
調(diào)試流程
當(dāng)我們配置完軟件并連接 Input 設(shè)備后,接下來(lái)就進(jìn)入調(diào)試流程。
第 1 步:確認(rèn)設(shè)備是否被系統(tǒng)識(shí)別
先通過(guò)cat /proc/bus/input/devices判斷Input設(shè)備有沒(méi)有被驅(qū)動(dòng)識(shí)別,這是最基礎(chǔ)的一步。
小提示:關(guān)鍵看輸出中的「Name」和「Handlers」,比如觸摸屏?xí)@示“goodix-ts”,Handlers對(duì)應(yīng)“event6”(設(shè)備節(jié)點(diǎn)); 若沒(méi)找到目標(biāo)設(shè)備,優(yōu)先排查:驅(qū)動(dòng)是否加載、硬件接線是否松動(dòng)(如I2C觸摸屏的SDA/SCL引腳)、設(shè)備樹(shù)配置是否正確(如I2C地址、中斷引腳)。

第 2 步:驗(yàn)證原始事件是否正常
如果設(shè)備已識(shí)別,但操作沒(méi)反應(yīng),可以使用getevent/hexdump/od (Linux 與 Android 支持不同命令)等命令監(jiān)聽(tīng)原始事件,判斷驅(qū)動(dòng)是否能正常上報(bào)數(shù)據(jù)。
比如,執(zhí)行命令hexdump /dev/input/event6,然后操作Input設(shè)備(如觸摸屏幕、按按鍵),觀察輸出;
正常情況:會(huì)持續(xù)輸出事件,比如觸摸屏?xí)蠥BS_MT_POSITION_X(X坐標(biāo))、ABS_MT_POSITION_Y(Y坐標(biāo))事件。
異常情況:無(wú)輸出→驅(qū)動(dòng)未正確上報(bào)事件,檢查驅(qū)動(dòng)probe函數(shù)是否執(zhí)行、中斷是否觸發(fā)(關(guān)鍵點(diǎn))。
第 3 步:用evtest/tslib 做更細(xì)致的功能驗(yàn)證
getevent/hexdump/od 等命令看原始數(shù)據(jù),evtest/tslib(觸摸專用) 能更直觀地看到事件細(xì)節(jié),適合驗(yàn)證功能是否達(dá)標(biāo)。
排查思路
無(wú)論是硬件還是軟件都特別要留意中斷信號(hào),中斷是 Input 設(shè)備數(shù)據(jù)上報(bào)的關(guān)鍵!比如調(diào)試觸摸屏?xí)r,只要觸摸芯片正常工作,觸摸屏幕,中斷引腳的電平就應(yīng)該產(chǎn)生變化,驅(qū)動(dòng)程序通過(guò)捕獲其電平的變化觸發(fā)中斷函數(shù),從而實(shí)現(xiàn)數(shù)據(jù)上報(bào)。
說(shuō)句廢話:具體問(wèn)題具體分析。不過(guò)實(shí)際情況確實(shí)如此,這里無(wú)法列出所有情況,只能提供一些常見(jiàn)問(wèn)題的排查思路。
設(shè)備未識(shí)別
(1)驅(qū)動(dòng)未加載:看dmesg日志(dmesg | grep input)是否有報(bào)錯(cuò),根據(jù)報(bào)錯(cuò) log 進(jìn)行排查;
(2)dts 配置錯(cuò)誤:檢查設(shè)備樹(shù)中Input設(shè)備的節(jié)點(diǎn)配置(如I2C地址、中斷引腳、compatible屬性),確保與驅(qū)動(dòng)匹配。
有設(shè)備節(jié)點(diǎn)但無(wú)事件輸出
(1)中斷未觸發(fā):用cat /proc/interrupts查看中斷是否有計(jì)數(shù),無(wú)計(jì)數(shù)→硬件接線錯(cuò)誤或中斷配置錯(cuò)誤;
(2)驅(qū)動(dòng)未初始化:查看dmesg日志,看驅(qū)動(dòng)probe函數(shù)是否有報(bào)錯(cuò)(如資源申請(qǐng)失?。?。
(完)
本人專注 Linux 驅(qū)動(dòng) & Linux/Android BSP 開(kāi)發(fā)調(diào)試,可接外包項(xiàng)目/技術(shù)支持/問(wèn)題定位。有需求或交個(gè)朋友可加微信:【Chen_WeChat2026】。
更多原創(chuàng)技術(shù)文章:《README 2026》。
審核編輯 黃宇
-
驅(qū)動(dòng)
+關(guān)注
關(guān)注
12文章
1968瀏覽量
88602 -
Linux
+關(guān)注
關(guān)注
88文章
11778瀏覽量
219185
發(fā)布評(píng)論請(qǐng)先 登錄
云臺(tái)電機(jī)驅(qū)動(dòng)系統(tǒng)載波參數(shù)配置與調(diào)試
驅(qū)動(dòng)之路#04:LCD 驅(qū)動(dòng)程序分析(基于RK3576)
驅(qū)動(dòng)之路#03:LCD 時(shí)序參數(shù)分析
RK平臺(tái)新聲卡添加與驅(qū)動(dòng)調(diào)試指南
【免費(fèi)送書(shū)】成為硬核Linux開(kāi)發(fā)者:《Linux 設(shè)備驅(qū)動(dòng)開(kāi)發(fā)(第 2 版)》
達(dá)實(shí)智能分享AI時(shí)代的心力驅(qū)動(dòng)之路
硬件調(diào)試:JLink 驅(qū)動(dòng)配置與調(diào)試技巧
驅(qū)動(dòng)之路#12:如何調(diào)試Input設(shè)備?
評(píng)論