原文地址:https://yq.aliyun.com/articles/10526
移植tslib 的詳細步驟:
tslib-1.4.tar.gz源碼下載地址:tslib-1.4.tar.gz
# tar -xzvf tslib-1.4.tar.gz
# cd tslib
# ./autogen.sh
#?mkdir tmp
#?echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache(必須加,具體原因看文章最后)
#?./configure --host=arm-linux --enable-inputapi=no --cache-file=arm-linux.cache --prefix=$(pwd)/tmp
#?make && make install
make install后,會在tmp目錄生成4個子目錄:
include ?lib ?etc ?bin
生成的庫位于lib中,該目錄下還有一個子目錄ts,它包含了許多校準用到的庫(如input.so等)。
etc下的ts.conf為配置文件,bin目錄下為校準、測試工具(如校準的ts_calibrate,測試用的ts_test)。
然后把這個四個文件復制到根文件系統(tǒng)的根目錄下。
配置文件ts.conf內容如下:
module_raw input?(去掉前面的# 和空格,其他的保持不變)
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear
module_raw有許多種,這里只使用input(即Linux的input子系統(tǒng),設備文件名稱為/dev/event1)/dev/event0為觸模屏的設備節(jié)點
vi /etc/profile 中添加如下命令
export TSLIB_TSDEVICE=/dev/event0指定觸屏設備
export TSLIB_CALIBFILE=/etc/pointercal指定觸摸屏校準文件?pintercal?的存放位置?
export TSLIB_CONFFILE=/etc/ts.conf指定TSLIB配置文件的位置
export TSLIB_PLUGINDIR=/lib/ts/指定觸摸屏插件所在路徑
export TSLIB_CONSOLEDEVICE=/dev/tty1設定控制臺設備為none,否則默認為/dev/tty,這樣可以避免出現“open
consoledevice: No such file or directory KDSETMODE: Bad file descriptor”的錯誤
export TSLIB_FBDEVICE=/dev/fb0指定幀緩沖設備?
當我執(zhí)行?ts_calibrate 出現了如下錯誤:
selected device is not a touchscreen I understand
在網上找了找到文章后發(fā)現原因是內核用的EV_VERSION為0x0100001,交叉編譯工具EV_VERSION為0x0100000
把這兩個修改成一樣就可以了。(其實正解也是這樣)
方法一:
我修改# vi include/linux/input.hEV_VERSION為0x0100000,重新編譯內核還是出現相同的錯誤,這兒花了我大把的時間,后來才發(fā)現我這個?EV_VERSION宏改變了,而我的LCD驅動程序卻沒有重新編譯,我就在lcd驅動程序中隨便移動一下,就是為了網編譯器檢測到我這個驅動是修改過的,然后lcd驅動也重新編譯了,再次測試就OK了,心碎啊,花了兩個小時時間才解決掉。
方法二:
交叉編譯中修改/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/linux/input.h中EV_VERSIN為0x0100001
提示下這個交叉編譯下的input.h有可能你的路徑跟我的不一樣,你可以在你交叉編譯路徑下用如下命令搜索:
find -name "input.h"
在make時候可能出現如下錯誤:
ts_test.o(.text 0x218): In function `main':
: undefined reference to `rpl_malloc'
在當前目錄查找了rpl_malloc,發(fā)現configure里有#define malloc rpl_malloc一行。分析configure 腳本相關的代碼,原來是ac_cv_func_malloc_0_nonnull引起的,OK我們不讓它檢查了,產生一個cache文件arm-linux.cache,欺騙configure:
解決辦法:
#?echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache