大家好,我是情報(bào)小哥~
在編譯Linux系統(tǒng)的過(guò)程中,總?cè)菀子龅礁鞣N大大小小的問(wèn)題,要么是某個(gè)編譯選項(xiàng)設(shè)置不正確,編譯器與編譯源碼不匹配,又或者是系統(tǒng)中沒(méi)有安裝相應(yīng)的軟件或者庫(kù)等等。
然而這些問(wèn)題運(yùn)氣不錯(cuò)網(wǎng)絡(luò)上搜索一下即可搞定,然而遇到生僻一點(diǎn)的問(wèn)題,那估計(jì)得把你折騰得半死,問(wèn)題是還不一定弄得好。
好在這些成熟的組件或者系統(tǒng)源碼在編譯或者使用異常以后,或多或少都會(huì)輸出一些信息,供程序員進(jìn)行問(wèn)題排查。
那么小哥下面就簡(jiǎn)單介紹一下最近遇到的tslib問(wèn)題排查過(guò)程。
01
一個(gè)問(wèn)題
在部署完tslib環(huán)境以后,其安裝目錄中會(huì)生成一些測(cè)試程序供用戶使用,然而當(dāng)我們運(yùn)行相應(yīng)的測(cè)試應(yīng)用程序,卻得到如下結(jié)果 :
表示環(huán)境變量中指定的設(shè)備,tslib庫(kù)識(shí)別不出該設(shè)備為觸摸設(shè)備。而這樣的錯(cuò)誤字符串的輸出,一般都來(lái)源于源碼,直接在tslib源碼路徑中進(jìn)行搜索得到如下結(jié)果。(當(dāng)然如果要進(jìn)行詳細(xì)的分析也可以使用VSCode等工具分析)
這里采用grep命令行對(duì)路徑中的文件進(jìn)行字符串的查找,grep主要是用于搜索匹配模板的行,默認(rèn)情況下就是打印出來(lái)匹配的行。
-n選項(xiàng)表示:以行號(hào)作為前綴;
-R選項(xiàng)表示遞歸讀取每級(jí)目錄下的所有文件。
更加詳細(xì)的使用說(shuō)明就交給man grep了。
上面的輸出結(jié)果,其字符串來(lái)源于input-raw.c文件的61行,看一下該文件輸出該字符串的條件,并根據(jù)條件來(lái)進(jìn)行判斷和調(diào)試。
可以直接修改此部分的判斷語(yǔ)句,進(jìn)行調(diào)試,輸出到底是那個(gè)條件導(dǎo)致無(wú)法滿足。
通過(guò)調(diào)試可以了解到version==EV_VERSION條件不滿足,一個(gè)是內(nèi)核傳入的,一個(gè)是編譯器指定的。
通過(guò)同樣的方式可以查到內(nèi)核中的EV_VERSION的定義如下:
同樣查找編譯器中的EV_VERSION的定義如下:
兩者確實(shí)是不同,所以導(dǎo)致運(yùn)行tslib庫(kù)報(bào)錯(cuò),這里我們優(yōu)先把內(nèi)核中的EV_VERSION改成與編譯器的一致,看是否能夠解決該問(wèn)題。
然后重新編譯內(nèi)核并進(jìn)行燒錄。
完成以后直接運(yùn)行bin文件下的ts_print測(cè)試觸摸屏驅(qū)動(dòng)看是否正常,運(yùn)行程序以后沒(méi)有再輸出之前的異常字符串,然后點(diǎn)擊觸摸屏,即可看到終端輸出相應(yīng)的坐標(biāo)數(shù)據(jù):
這樣看來(lái)tslib初步測(cè)試和部署完成。
**最 后 **
好了,這里小哥就介紹了一下tslib觸摸庫(kù)部署過(guò)程一個(gè)排查問(wèn)題的基本過(guò)程,很多類似的問(wèn)題也可以嘗試這樣排查,希望本文能夠?qū)δ阌袔椭鞠盗形募€會(huì)持續(xù)更新。
-
Linux
+關(guān)注
關(guān)注
87文章
11342瀏覽量
210152 -
編譯器
+關(guān)注
關(guān)注
1文章
1642瀏覽量
49240 -
編譯
+關(guān)注
關(guān)注
0文章
661瀏覽量
32977
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論