Linux移植随笔:终于解决Tslib的问题了【转】
轉(zhuǎn)自:http://www.latelee.org/embedded-linux/porting-linux-tslib.html
?
前段時(shí)間讓Tslib搞暈頭了,原來一切都是版本惹的禍。本文只是一個(gè)隨筆,隨筆者,隨意用筆寫下心得而已,因此不必較真。正如我所欣賞的“乘興而來,興盡而返”一樣。——估計(jì)當(dāng)年王子猷是賞完了夜景,興致也完了,就回家了。
閑話少提。
搞tslib時(shí),出現(xiàn)了許多錯(cuò)誤,像
No raw modules loaded.
ts_config: Success
selected device is not a touchscreen I understand
ts_read: Invalid argument
等等錯(cuò)誤,在網(wǎng)上找了很多資料,可惜都沒有適合我的。
現(xiàn)在用的tslib是使用git下載的。注意,最好使用Linux平臺(tái)下載,因?yàn)閠slib中包括了腳本文件(如autogen.sh),而Windows與Linux處理一行的結(jié)束字符是不相同的,因此請?jiān)贚inux中下載,當(dāng)然,使用編輯器轉(zhuǎn)換結(jié)束字符也無所謂。
命令如下:
$ git clone?https://github.com/kergoth/tslib
在Linux下安裝git可參考:Linux移植隨筆:git的使用。
編譯過程如下:
$ ./autogen.sh
$ ./configure –host=arm-linux –prefix=/home/latelee/lib/tslib
$ make
$ make install
網(wǎng)上流行的編譯方法如下:
$ ./autogen.sh
$ 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
$ make
$ make install
有兩點(diǎn)不同:
一,沒有“ac_cv_func_malloc_0_nonnull=yes”,編譯過程沒有報(bào)錯(cuò);
二,去掉“–enable-inputapi=no”,網(wǎng)上說法不在此處提及,單看README文件的描述:
TSLIB_TSDEVICE???TS device file name.
Default (non inputapi): /dev/touchscreen/ucb1x00
Default (inputapi): /dev/input/event0
板子的觸摸屏設(shè)備文件正是/dev/input/event0(默認(rèn)值,可以在配置文件ts.conf中設(shè)置這個(gè)環(huán)境變量)。
make install后,會(huì)在/home/latelee/lib/tslib目錄生成4個(gè)子目錄:
include lib etc bin
生成的庫位于lib中,該目錄下還有一個(gè)子目錄ts,它包含了許多校準(zhǔn)用到的庫(如input.so等)。etc下的ts.conf為配置文件,bin目錄下為校準(zhǔn)、測試工具(如校準(zhǔn)的ts_calibrate,測試用的ts_test)。
配置文件如下:
# Late Lee 2011-03-31 for touchscreen testexport TSLIB_ROOT=/usr/local/tslibexport TSLIB_TSDEVICE=/dev/input/event0export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.confexport TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/tsexport TSLIB_CALIBFILE=/etc/pointercalexport TSLIB_CONSOLEDEVICE=noneexport TSLIB_FBDEVICE=/dev/fb0export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib?
(該文件的日期為上個(gè)月最后一天,離今已十余天,為了這個(gè)花費(fèi)的時(shí)日可不少。)
使用TSLIB_ROOT這個(gè)變量比較好,因?yàn)橹灰獙⒕幾g生成后的tslib文件夾復(fù)制到某個(gè)位置,再修改這個(gè)變量即可,其它的不用修改。
配置文件ts.conf內(nèi)容如下:
module_raw input
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear
module_raw有許多種,這里只使用input(即Linux的input子系統(tǒng),設(shè)備文件名稱為/dev/input/event0),其它的刪除掉。后面的幾個(gè)module還沒有深入了解,它們使用的庫就在tslib/lib/ts中,最后三個(gè)模塊的字面意思是“方差(濾波)”、“去抖動(dòng)(去噪)”、“線性(坐標(biāo)變換)”,對這些東西不了解,不發(fā)表意見。
運(yùn)行校準(zhǔn)程序,觸摸屏依次出現(xiàn)5個(gè)點(diǎn),依次點(diǎn)擊之:
# ./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
Took 7 samples…
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
生成的校準(zhǔn)文件名為pointercal,位于/etc目錄下。
如果想運(yùn)行ts的測試程序,在tslib/bin目錄下輸入
./ts_test
即可。
屏幕最上方會(huì)出現(xiàn)三個(gè)按鈕,分別為“Drag”、“Draw”和“Quit”,默認(rèn)是第一個(gè),因此,用觸摸筆點(diǎn)擊任何一處,十字光標(biāo)便會(huì)到那里。
下面是點(diǎn)擊“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結(jié)構(gòu)體的兩個(gè)成員:tv_sec和tv_usec,中間兩列分別是X和Y的坐標(biāo),最后為pressure,這里可以理解成“觸摸事件”,為1表示觸摸筆點(diǎn)擊了(接觸)屏幕,為0表示觸摸筆離開了屏幕(這里出現(xiàn)很多的1是正常的,因?yàn)閷懽诌^程中筆沒有離開觸摸屏——這是廢話,請無視之)。
點(diǎn)擊屏幕上“Quit”或按Ctrl+C可退出該程序。
文中前面安裝Tslib的路徑是主機(jī)(又稱開發(fā)主機(jī)、服務(wù)器、host)上的,后面與Tslib環(huán)境變量有關(guān)的是開發(fā)板(又稱目標(biāo)板、板子、target)上的。
最后附圖一張,也算有圖有真相了:
?
?
本文固定鏈接:?http://www.latelee.org/embedded-linux/porting-linux-tslib.html
【作者】張昺華 【出處】http://www.cnblogs.com/sky-heaven/ 【博客園】 http://www.cnblogs.com/sky-heaven/ 【新浪博客】 http://blog.sina.com.cn/u/2049150530 【知乎】 http://www.zhihu.com/people/zhang-bing-hua 【我的作品---旋轉(zhuǎn)倒立擺】 http://v.youku.com/v_show/id_XODM5NDAzNjQw.html?spm=a2hzp.8253869.0.0&from=y1.7-2 【我的作品---自平衡自動(dòng)循跡車】 http://v.youku.com/v_show/id_XODM5MzYyNTIw.html?spm=a2hzp.8253869.0.0&from=y1.7-2 【新浪微博】 張昺華--sky 【twitter】 @sky2030_ 【facebook】 張昺華 zhangbinghua 本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利.總結(jié)
以上是生活随笔為你收集整理的Linux移植随笔:终于解决Tslib的问题了【转】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis的scan怎么用 (附代码实例
- 下一篇: linux 文件权限后面一个点的含义