天天看點

Linux移植随筆:終于解決Tslib的問題了【轉】

前段時間讓Tslib搞暈頭了,原來一切都是版本惹的禍。本文隻是一個随筆,随筆者,随意用筆寫下心得而已,是以不必較真。正如我所欣賞的“乘興而來,興盡而返”一樣。——估計當年王子猷是賞完了夜景,興緻也完了,就回家了。

閑話少提。

搞tslib時,出現了許多錯誤,像

No raw modules loaded. ts_config: Success
selected device is not a touchscreen I understand
ts_read: Invalid argument

等等錯誤,在網上找了很多資料,可惜都沒有适合我的。

現在用的tslib是使用git下載下傳的。注意,最好使用Linux平台下載下傳,因為tslib中包括了腳本檔案(如autogen.sh),而Windows與Linux處理一行的結束字元是不相同的,是以請在Linux中下載下傳,當然,使用編輯器轉換結束字元也無所謂。

指令如下:

編譯過程如下:

$ ./autogen.sh $ ./configure –host=arm-linux –prefix=/home/latelee/lib/tslib $ make $ make install

網上流行的編譯方法如下:

$ echo “ac_cv_func_malloc_0_nonnull=yes”> tmp.cache $ ./configure –host=arm-linux –cache-file=tmp.cache –enable-inputapi=no –prefix=/home/latelee/lib/tslib

有兩點不同:

一,沒有“ac_cv_func_malloc_0_nonnull=yes”,編譯過程沒有報錯;

二,去掉“–enable-inputapi=no”,網上說法不在此處提及,單看README檔案的描述:

TSLIB_TSDEVICE   TS device file name. Default (non inputapi): /dev/touchscreen/ucb1x00 Default (inputapi): /dev/input/event0

闆子的觸摸屏裝置檔案正是/dev/input/event0(預設值,可以在配置檔案ts.conf中設定這個環境變量)。

make install後,會在/home/latelee/lib/tslib目錄生成4個子目錄:

include lib etc bin

生成的庫位于lib中,該目錄下還有一個子目錄ts,它包含了許多校準用到的庫(如input.so等)。etc下的ts.conf為配置檔案,bin目錄下為校準、測試工具(如校準的ts_calibrate,測試用的ts_test)。

配置檔案如下:

 

(該檔案的日期為上個月最後一天,離今已十餘天,為了這個花費的時日可不少。)

使用TSLIB_ROOT這個變量比較好,因為隻要将編譯生成後的tslib檔案夾複制到某個位置,再修改這個變量即可,其它的不用修改。

配置檔案ts.conf内容如下:

module_raw input module pthres pmin=1 module variance delta=30 module dejitter delta=100 module linear

module_raw有許多種,這裡隻使用input(即Linux的input子系統,裝置檔案名稱為/dev/input/event0),其它的删除掉。後面的幾個module還沒有深入了解,它們使用的庫就在tslib/lib/ts中,最後三個子產品的字面意思是“方差(濾波)”、“去抖動(去噪)”、“線性(坐标變換)”,對這些東西不了解,不發表意見。

運作校準程式,觸摸屏依次出現5個點,依次點選之:

# ./ts_calibrate xres = 240, yres = 320 Took 14 samples… Top left : X =  276 Y =  795 Took 12 samples… Top right : X =  736 Y =  796 Took 11 samples… Bot right : X =  735 Y =  248 Took 7 samples… Bot left : X =  274 Y =  247 Center : X =  505 Y =  524 -33.156189 0.304019 -0.000832 369.119629 0.000871 -0.401456 Calibration constants: -2172924 19924 -54 24190624 57 -26309 65536

生成的校準檔案名為pointercal,位于/etc目錄下。

如果想運作ts的測試程式,在tslib/bin目錄下輸入

./ts_test

即可。

螢幕最上方會出現三個按鈕,分别為“Drag”、“Draw”和“Quit”,預設是第一個,是以,用觸摸筆點選任何一處,十字光标便會到那裡。

下面是點選“Draw”按鈕并用觸摸筆寫字的提示資訊的一小部分:

1302603922.770286:     98    302      1 1302603922.800295:    107    300      1 1302603922.815277:    118    297      1 1302603922.830291:    130    294      1 1302603922.845288:    143    290      1 1302603922.845288:    151    288      1 1302603922.875166:    168    284      0

第一列為timeval結構體的兩個成員:tv_sec和tv_usec,中間兩列分别是X和Y的坐标,最後為pressure,這裡可以了解成“觸摸事件”,為1表示觸摸筆點選了(接觸)螢幕,為0表示觸摸筆離開了螢幕(這裡出現很多的1是正常的,因為寫字過程中筆沒有離開觸摸屏——這是廢話,請無視之)。

點選螢幕上“Quit”或按Ctrl+C可退出該程式。

文中前面安裝Tslib的路徑是主機(又稱開發主機、伺服器、host)上的,後面與Tslib環境變量有關的是開發闆(又稱目标闆、闆子、target)上的。

最後附圖一張,也算有圖有真相了:

Linux移植随筆:終于解決Tslib的問題了【轉】

【新浪微網誌】 張昺華--sky

【twitter】 @sky2030_

【facebook】 張昺華 zhangbinghua

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利.

繼續閱讀