找回密码
 注册
关于网站域名变更的通知
查看: 808|回复: 1
打印 上一主题 下一主题

54.5 Tslib 移植和使用 ft5426 触摸驱动添加成功后,发现触摸可能不太准确,这时...

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-12-7 10:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
54.5 Tslib  移植和使用
6 j' I6 H( d5 ^, L8 Xft5426 触摸驱动添加成功后,发现触摸可能不太准确,这时可以使用一个第三方开源库 tslib 来调试触摸屏。下面来看一下 tslib 源码如何移植。
( }2 Y' x& V) M! R; A! |  b54.5.1  获取 tslib  源码# y$ b2 k- z' t# \: s6 z
tslib 源码可以从官方地址获取:https://github.com/libts/tslib,打开网址可以看到最新的版本是 1.21,可以从官网获取,也可以从网盘资料中获取,资料路径:i.MX6UL 终结者光盘资料/06_Linux 驱动例程/第三方库源码/tslib-1.21.tar.bz2。获取到 tslib 源码后,拷贝到 Ubuntu 系统下并解压,得到 tslib-1.21 文件夹。
+ K% T% G# K0 X% h( f% \54.5.2  编译 tslib5 V0 n7 v4 K8 l" y/ I
获取到 tslib 源码后,可以编译 tslib 源码,具体有下面几个步骤。, I* a: {3 M, H  f( c
1、修改 tslib 源码所属用户
9 p5 k+ n% l/ x( B  L: h修改解压得到的 tslib-1.21 目录所属用户为当前用户,如果不修改可能会在稍后的编译中会遇到各种问题。我当前 ubuntu 的登录用户名为“topeet”,那么修改命令如下:+ c& u$ H% |4 @% c# {% C2 {  O
sudo chown topeet:topeet tslib-1.21 -R修改后如图 54.5.2.1 所示:  t6 Q8 |3 S$ X/ u0 N
* |2 b% M# e1 Y+ `7 Y5 U
2、Ubuntu 工具安装
( @! f  ]% t9 V& k8 U% Z  }编译 tslib 的时候需要先在 ubuntu 中安装一些文件,防止编译 tslib 过程中出错,命令如下所示:* ]8 Z6 G, \- ~6 ^7 L3 a
sudo apt-get install autoconf" N5 ^( b% M" O
sudo apt-get install automake; ?9 J% C' Y8 Q# C3 Y7 G+ R
sudo apt-get install libtool
7 L! N" F. l2 A3 r3 V* V1 j9 U7 C3、编译 tslib0 M" v& A* C' ~" b0 A7 a
首先创建一个 tslib 文件夹,用于存放编译结果。比如文件路径为:/home/topeet/tslib
7 d. d  h5 Z4 P9 B然后使用下列命令配置并编译 tslib:
' t' C! \6 T$ `1 scd tslib-1.21/ //进入 tslib 源码目录
, t2 ^! Y" W; W./configure --host=ARM-none-linux-gnueabi --prefix=/home/topeet/tslib+ M6 Y% ?% b- a- C
make //编译( S2 ^2 j# A  b$ j5 n) r
make install //安装' g. x- d8 k" q: N7 ]
注意,在使用./configure 配置 tslib 的时候“--host”参数指定编译器,指定的编译器要和编译文件系统使用同一个编译器,否则在开发板下不能正常使用。“--prefix”参数指定编译完成以后的 tslib 文件安装到哪里,这里肯定是安装到我们刚刚创建的“tslib”目录下。5 @7 u0 z& F( h$ I* a7 {" [4 ]
编译完成后 tslib 目录如图 54.5.2.2 所示:; C0 C) [) x: P; C* [+ I+ P/ }

. [5 l: m+ s7 E' z' u7 c* {然后将 tslib 目录下的所有文件拷贝到开发板的根文件系统下。如果直接拷贝的话会出现符号链接文件不能拷贝的现象,可以先使用 tar 命令进行打包,然后解压到根文件系统下。命令如下:
" G4 g  @5 U0 E; X. |! ytar -czvf lib.tar.gz * //打包生成 lib.tar.gz 压缩包
1 L% j, Z  X) n% l) _! @tar -xvf lib.tar.gz / //解压到开发板根文件目录下
: z% B& K6 M( ?4 U1 ^5 O# Y1 ~$ @& f54.5.3  测试 tslib0 W1 F/ I* \  I+ @3 c- R% [9 {
当把编译好的 tslib 拷贝到开发板后,进行命令测试。( z. B3 z  L4 c( d3 F8 a! U
1、配置 tslib* }: q, n; Z* Y
打开/etc/ts.conf 文件,找到下面这一行:; @% Z' E2 k) P: M3 Q/ z
module_raw input
7 ~: j4 J$ C# q4 G& b8 h如果上面这句前面有“#”的话就删除掉“#”。
5 a: d3 e) N1 a打开/etc/profile 文件,在里面加入如下内容:$ K! [7 I- p1 k9 m- M0 Q
1 export TSLIB_TSDEVICE=/dev/input/event13 u( g# N( Y- @4 ]% U
2 export TSLIB_CALIBFILE=/etc/pointercal
; r* ]+ F, w* q6 ^5 Z& ]3 export TSLIB_CONFFILE=/etc/ts.conf
1 z8 n6 b$ J; R& o( T2 v2 s4 export TSLIB_PLUGINDIR=/lib/ts
1 Q2 o+ H; i& ]9 n5 export TSLIB_CONSOLEDEVICE=none
/ l/ S% v* R- c0 O/ L* D0 H( q& i6 export TSLIB_FBDEVICE=/dev/fb08 s) ?% c8 j! _+ b( v7 r! B
第 1 行,TSLIB_TSDEVICE 表示触摸设备文件,这里设置为/dev/input/event1,这个要根据具体情况设置,如果你的触摸设备文件为 event2 那么就应该设置为/dev/input/event2,以此类推。. M. L, j; s2 }4 N& o3 e8 W
第 2 行,TSLIB_CALIBFILE 表示校准文件,如果进行屏幕校准的话校准结果就保存在这个文件中,这里设置校准文件为/etc/pointercal,此文件可以不存在,校准的时候会自动生成。2 t' Z6 F4 S- T) N
第 3 行,TSLIB_CONFFILE 表示触摸配置文件,文件为/etc/ts.conf,此文件在移植 tslib 的时候会生成。$ w2 m- s6 ]4 C2 g) w
第 4 行,TSLIB_PLUGINDIR 表示 tslib 插件目录位置,目录为/lib/ts。
& P) l# S1 \2 E) J* K9 z# ]5 m第 5 行,TSLIB_CONSOLEDEVICE 表示控制台设置,这里不设置,因此为 none。
& Z. ~4 y# M" f3 A第 6 行,TSLIB_FBDEVICE 表示 FB 设备,也就是屏幕,根据实际情况配置,我的屏幕文件为/dev/fb0,因此这里设置为/dev/fb0。
5 v* H3 @* ]2 @4 Q" ^8 A' ^全部配置好以后重启开发板,然后就可以进行测试了。
3 X0 V8 `, S: r$ B3 r1 \2、 测试 tslib
1 o' q; P) ^4 k( I) `, I( M) t开发板重新启动后,可以先进行校准,使用下面的命令:
7 E# G  u( q4 i, H2 r, n) e5 n0 Qts_calibrate
" s* i, L& t7 O( L% r校准完成后,会生成/etc/pointercal 文件,如果想重新校准,可以直接删除/etc/pointercal 文件,重新执行校准命令。  }' c+ R( Y: ^; }
然后可以使用 ts_test_mt 这个命令来测试触摸屏工作是否正常,以及多点触摸是否有效,执行如下所示命令:
: W9 ~7 Y+ O, V# l/ J; G) bts_test_mt+ ^% ?6 T  Y5 e, i, u; J
命令执行后会打开一个测试界面,如图 54.5.3.1 所示:
' o$ p% U" Z2 b# g& V- p7 E8 ]$ ^) b
上图中有三个按钮“Drag”、“Draw”和“Quit”,这三个按钮的功能如下:
7 r# n6 T. E% u( I$ @Drag:拖拽按钮,默认就是此功能,大家可以看到屏幕中间有一个十字光标,我们可以通过触摸屏幕来拖拽此光标。一个触摸点一个十字光标,对于 5 点电容触摸屏,如果 5 个手指都放到屏幕上,那么就有 5个光标,一个手指一个。8 b; W: V4 X9 Q
Draw:绘制按钮,按下此按钮我们就可以在屏幕上进行简单的绘制,可以通过此功能检测多点触摸工作是否正常。7 }" O$ e: {; V8 m- k9 u! o
Quit:退出按钮,退出 ts_test_mt 测试软件。7 m5 _3 v2 U) o5 @4 p, w' `9 u7 D& b
54.6  使用 Linux  内核自带的 ft5426  驱动
% E( R2 `& }) H, @4 [9 J在 Linux 内核中集成了许多电容触摸芯片的驱动,其中就包括我们使用的 ft5426 的驱动。所以我们来使用一下 Linux 内核自带的 ft5426 驱动文件。在使用之前需要先将前面我们添加的 ft5426.c 驱动文件去除掉,只 需 要 修 改 drivers/input/touchscreen/Makefile 这个文件即可,将下面这一行删除掉:+ G0 h# U" K3 a
obj-y += ft54266.o
( Z1 k. o& O, K7 p8 |+ ^) X( t内核自带的 ft5426 的驱动文件为 drivers/input/touchscreen/edt-ft5x06.c。9 {2 F8 |& b6 s
1、使能内核 ft5426  驱动配置: _9 i& }+ G4 o' n0 B% Q) u; z
要使用 Linux 内核自带的驱动,需要添加 Linux 内核配置。首先打开图形化配置界面,命令如下:
4 f* \: d( L' f! v8 hmake ARCH=arm menuconfig1 Z- a- x8 Z, j" s8 U8 S
配置路径如下:
0 Y% t, T' F2 @6 ]& _Device Drivers --->
7 W5 @$ C- \, g- y8 c4 \' }$ tInput device support --->; U6 b% g* }8 K. z2 y* M" L+ ~
Touchscreens --->
+ F& ^% @! r/ i1 a' G<*> EDT FocalTech FT5x06 I2C Touchscreen support
  r( c% p; {( w# O6 t$ c配置如图 所示:
5 ]4 V- o: u% K8 z: M3 m+ ?3 u
. l$ i9 c# R2 _8 o7 j配置完成后重新编译 Linux 内核,生成 zImage 镜像。( @% m9 M/ K, G; T5 M9 x: o
2、  修改设备树文件+ J% f' b1 }, P# {) I" a! p
我们要根据 edt-ft5x06.c 文件中的 compatible 属性修改设备树下 ft5426 设备节点的 compatible 属性值edt-ft5x06.c 所支持的 compatible 属性列表如下所示:. y- T) ^! h4 C4 s& ^, \7 f
static const struct of_device_id edt_ft5x06_of_match[] = {7 p6 U" Z. |# [" |2 p. g
{ .compatible = "edt,edt-ft5206", },
2 S9 g  n3 C& v5 c; m$ J{ .compatible = "edt,edt-ft5306", },% a5 d3 A) P& a3 a, O9 M% s
{ .compatible = "edt,edt-ft5406", },4 F0 E  _$ t, b! N! ^
{ /* sentinel */ }  ^5 t% V3 q4 [2 J9 {0 M* z
};
- c" C' |- ^7 ?& G可以看出,edt-ft5x06.c 文件默认支持的 compatible 属性只要三个“edt,edt-ft5206”、“edt,edt-ft5306”和“edt,edt-ft5406”。我们可以修改设备树中的 ft5426 节点,在 compatible 属性值添加一条“edt,edt-ft5406”,或者在 edt-ft5x06.c 文件中的 edt_ft5x06_of_match 表,在里面添加一条:5 j' {! ^, \- l. Q: z
{ .compatible = "edt,edt-ft5426", }
* M, [. [* G5 j6 ~$ R. m6 |总之一句话,让 ft5426 这个设备和 edt-ft5x06.c 这个驱动匹配起来。这里我们修改设备树下的 ft5426设备节点,修改后如下所示;
: u; r" B, E. W% o; S1 ft5426: ft5426@38 {
7 X# g& S9 B( F9 _4 j3 B2 compatible = "edt,edt-ft5426","edt,edt-ft5406";. S4 [% c6 i8 i6 Y2 P
3 reg = <0x38>;2 p- R8 ^# E% y( r# h" R: m
4 pinctrl-names = "default";
. E  W/ v, B) c! {9 C( F5 pinctrl-0 = <&pinctrl_tsc>;' x9 z1 y. K4 |. i) B
6 interrupt-parent = <&gpio1>;7 S( Q' ]- \3 o0 p% [) N5 {' @* {' K
7 interrupts = <9 0>;4 o( b8 C. N. a$ c; {7 Y. g- Y! V+ C
8 reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;# S/ Z2 E3 Y% x8 V  c7 n5 l/ [
9 interrupt-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
# T& K/ p6 Q5 \10 };! S/ g% ]  L, n% {
在 compatible 属性中添加"edt,edt-ft5406"兼容值。
) T$ H( c( g) B. }4 b设备树修改完成后,重新编译。然后使用新的 zImage 和 dtb 设备树文件启动开发板。驱动正常的情况,有如下启动信息:
; c7 I( y3 k+ @) w# }' r  c  M7 s: A" i
然后可以使用下面的命令查看 input 设备的具体情况:7 m6 A5 D6 v. f$ @
cat /proc/bus/input/devices% c* Y1 T: z/ z; |
结果如图:! \: s  X1 d4 |$ S1 }' p
3 n" b4 B; I, `2 L' F
然后可以使用 hexdump 或者 ts_test_mt 命令进行测试。
$ k6 Z; S$ E7 u& E$ o
" |5 y* s7 }) X$ ~' }4 {2 K6 W3 a
9 g  a* y2 h3 p  \) o  V8 R4 c% V1 H; L; z! {. k

该用户从未签到

2#
发表于 2020-12-7 11:25 | 只看该作者
                          
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 20:14 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表