EDA365电子论坛网

标题: 54.5 Tslib 移植和使用 ft5426 触摸驱动添加成功后,发现触摸可能不太准确,这时... [打印本页]

作者: 孤久厌闹    时间: 2020-12-7 10:15
标题: 54.5 Tslib 移植和使用 ft5426 触摸驱动添加成功后,发现触摸可能不太准确,这时...
54.5 Tslib  移植和使用0 B* {( W! j, _' O- O
ft5426 触摸驱动添加成功后,发现触摸可能不太准确,这时可以使用一个第三方开源库 tslib 来调试触摸屏。下面来看一下 tslib 源码如何移植。
8 D9 Z( i+ W) [$ m54.5.1  获取 tslib  源码3 u3 E( \# m, }% E2 \
tslib 源码可以从官方地址获取:https://github.com/libts/tslib,打开网址可以看到最新的版本是 1.21,可以从官网获取,也可以从网盘资料中获取,资料路径:i.MX6UL 终结者光盘资料/06_Linux 驱动例程/第三方库源码/tslib-1.21.tar.bz2。获取到 tslib 源码后,拷贝到 Ubuntu 系统下并解压,得到 tslib-1.21 文件夹。
. A- A9 ~; C% t# A54.5.2  编译 tslib
( n$ c5 s5 Q6 y, D获取到 tslib 源码后,可以编译 tslib 源码,具体有下面几个步骤。
4 E0 ^% B8 s' {. f3 \- G; F1、修改 tslib 源码所属用户
+ [$ F- h$ ~+ F, v修改解压得到的 tslib-1.21 目录所属用户为当前用户,如果不修改可能会在稍后的编译中会遇到各种问题。我当前 ubuntu 的登录用户名为“topeet”,那么修改命令如下:
+ I( \8 L: {! b* ]+ wsudo chown topeet:topeet tslib-1.21 -R修改后如图 54.5.2.1 所示:
3 _: L2 m# ~/ j. D. b
" }9 W. R# x6 y$ v( z2、Ubuntu 工具安装6 H$ t5 L- ^# _
编译 tslib 的时候需要先在 ubuntu 中安装一些文件,防止编译 tslib 过程中出错,命令如下所示:. e) Y$ j! I3 U9 D4 e1 b. t7 k
sudo apt-get install autoconf
6 A# ]7 B8 Q$ csudo apt-get install automake
5 y3 |, w* E; L$ fsudo apt-get install libtool  C- ?8 Y) Z+ W* R- D8 q. y. x
3、编译 tslib
9 L* M4 _& F# k- x0 t, e首先创建一个 tslib 文件夹,用于存放编译结果。比如文件路径为:/home/topeet/tslib
0 X! n9 X2 A# p6 D( W9 W6 T+ A0 t; D然后使用下列命令配置并编译 tslib:9 ~3 Y( v4 K: R! q5 K& h+ \: W
cd tslib-1.21/ //进入 tslib 源码目录
6 s/ g% K+ C! z9 E% m: M3 e./configure --host=arm-none-linux-gnueabi --prefix=/home/topeet/tslib
$ {# y3 h- e# l, Q- L8 bmake //编译$ ~5 D' d* |- O! _( d) J% e
make install //安装
" q$ h3 B( `- i3 T注意,在使用./configure 配置 tslib 的时候“--host”参数指定编译器,指定的编译器要和编译文件系统使用同一个编译器,否则在开发板下不能正常使用。“--prefix”参数指定编译完成以后的 tslib 文件安装到哪里,这里肯定是安装到我们刚刚创建的“tslib”目录下。
% k! P8 W& w$ \, O编译完成后 tslib 目录如图 54.5.2.2 所示:7 \$ ^6 V9 s, G( ?+ |2 G
8 S2 q9 N1 I9 ~/ t  }7 @
然后将 tslib 目录下的所有文件拷贝到开发板的根文件系统下。如果直接拷贝的话会出现符号链接文件不能拷贝的现象,可以先使用 tar 命令进行打包,然后解压到根文件系统下。命令如下:
0 r2 J6 k/ E2 Ftar -czvf lib.tar.gz * //打包生成 lib.tar.gz 压缩包
* K9 `1 g7 _# @) N7 B$ Dtar -xvf lib.tar.gz / //解压到开发板根文件目录下3 M7 P* [- ]4 s3 ~* v  L- I
54.5.3  测试 tslib( N- |3 C  d" H6 ], s9 _2 c
当把编译好的 tslib 拷贝到开发板后,进行命令测试。: ~: ~9 X: S  T" v
1、配置 tslib
: X' D2 d* J' k打开/etc/ts.conf 文件,找到下面这一行:& O* x7 U: G) c1 s
module_raw input
3 w9 V" C7 I- V& s如果上面这句前面有“#”的话就删除掉“#”。, S0 }' a( w3 \  w6 ?1 S9 w$ V
打开/etc/profile 文件,在里面加入如下内容:
  n2 A3 c- [' J7 p1 }1 export TSLIB_TSDEVICE=/dev/input/event1
6 a; F) C) z) j$ e9 H* o2 export TSLIB_CALIBFILE=/etc/pointercal
" |; _' ^; O6 L+ r3 export TSLIB_CONFFILE=/etc/ts.conf# v7 ^3 d, e( V7 K
4 export TSLIB_PLUGINDIR=/lib/ts* Y4 c, ~7 C- K% z5 E& f  R
5 export TSLIB_CONSOLEDEVICE=none) k2 _6 S6 L+ y2 ?, E# p1 ]
6 export TSLIB_FBDEVICE=/dev/fb0
3 f: F1 V' v7 |0 [3 [第 1 行,TSLIB_TSDEVICE 表示触摸设备文件,这里设置为/dev/input/event1,这个要根据具体情况设置,如果你的触摸设备文件为 event2 那么就应该设置为/dev/input/event2,以此类推。
, J( K. n; k2 d& P+ a第 2 行,TSLIB_CALIBFILE 表示校准文件,如果进行屏幕校准的话校准结果就保存在这个文件中,这里设置校准文件为/etc/pointercal,此文件可以不存在,校准的时候会自动生成。
8 o- J0 f3 c* e1 r2 o第 3 行,TSLIB_CONFFILE 表示触摸配置文件,文件为/etc/ts.conf,此文件在移植 tslib 的时候会生成。9 q7 W# k' ]( K. w  |7 @
第 4 行,TSLIB_PLUGINDIR 表示 tslib 插件目录位置,目录为/lib/ts。; ~/ T4 B- A% H3 V8 L( L* ?2 O
第 5 行,TSLIB_CONSOLEDEVICE 表示控制台设置,这里不设置,因此为 none。3 O% N+ C' d/ b* F$ L8 p. I+ i5 u
第 6 行,TSLIB_FBDEVICE 表示 FB 设备,也就是屏幕,根据实际情况配置,我的屏幕文件为/dev/fb0,因此这里设置为/dev/fb0。
, r" o; u) Z4 @1 e* Y全部配置好以后重启开发板,然后就可以进行测试了。
* n, Q% D5 q6 |4 Z2、 测试 tslib
  r; _. R) g0 M& R3 c开发板重新启动后,可以先进行校准,使用下面的命令:
4 l0 Z0 S' A5 \# M3 C1 Sts_calibrate
  Y3 y3 U8 j: u5 C9 \) _校准完成后,会生成/etc/pointercal 文件,如果想重新校准,可以直接删除/etc/pointercal 文件,重新执行校准命令。
9 O; s6 s& D. j; `% A! b" M然后可以使用 ts_test_mt 这个命令来测试触摸屏工作是否正常,以及多点触摸是否有效,执行如下所示命令:; @; i% m5 }3 o- _4 {
ts_test_mt
, y) z, Q5 p- Y$ T' f+ R" Q& n命令执行后会打开一个测试界面,如图 54.5.3.1 所示:8 e/ a. B) b+ X: }1 W2 v4 N
) s* H9 H+ |( b6 N+ o4 U
上图中有三个按钮“Drag”、“Draw”和“Quit”,这三个按钮的功能如下:
& v- X, r4 k: p! D$ eDrag:拖拽按钮,默认就是此功能,大家可以看到屏幕中间有一个十字光标,我们可以通过触摸屏幕来拖拽此光标。一个触摸点一个十字光标,对于 5 点电容触摸屏,如果 5 个手指都放到屏幕上,那么就有 5个光标,一个手指一个。
+ }$ f. b4 [( [7 m' u9 N. EDraw:绘制按钮,按下此按钮我们就可以在屏幕上进行简单的绘制,可以通过此功能检测多点触摸工作是否正常。# Q& _" D, o' H+ P7 [0 l( |" e
Quit:退出按钮,退出 ts_test_mt 测试软件。4 I$ R5 ~. D4 E+ w8 l2 M7 w! S9 d  o
54.6  使用 Linux  内核自带的 ft5426  驱动4 p9 \  ]4 b1 a% ~1 s
在 Linux 内核中集成了许多电容触摸芯片的驱动,其中就包括我们使用的 ft5426 的驱动。所以我们来使用一下 Linux 内核自带的 ft5426 驱动文件。在使用之前需要先将前面我们添加的 ft5426.c 驱动文件去除掉,只 需 要 修 改 drivers/input/touchscreen/Makefile 这个文件即可,将下面这一行删除掉:; z# x# ~, G5 N% i- P
obj-y += ft54266.o& s* K! O; A/ ?, X" l2 q' \# _
内核自带的 ft5426 的驱动文件为 drivers/input/touchscreen/edt-ft5x06.c。
0 c8 x* j* {1 D- B4 c( ?1、使能内核 ft5426  驱动配置
/ u/ l: A$ ]4 D7 Y( C要使用 Linux 内核自带的驱动,需要添加 Linux 内核配置。首先打开图形化配置界面,命令如下:
- I! Z9 Q9 Z: U8 b) a: ~+ Vmake ARCH=arm menuconfig2 }( f7 V' h- ?
配置路径如下:9 R. B4 e: v5 Z% d3 Q9 _0 `7 s/ Y
Device Drivers --->$ e. s8 o3 f) E2 {. }, V* F' @$ E) ?
Input device support --->
, m& v) I, W- k9 W5 ^+ F2 wTouchscreens --->; s  d5 i; Z/ |6 j& Q1 n' p
<*> EDT FocalTech FT5x06 I2C Touchscreen support) P; X2 m2 {$ Q6 V
配置如图 所示:
* W; M4 x9 f/ `8 P% k# p
* `! N8 b, r& W5 P配置完成后重新编译 Linux 内核,生成 zImage 镜像。
$ ~" k* g. _6 ]/ [3 h2、  修改设备树文件5 M3 Z, F! B; V
我们要根据 edt-ft5x06.c 文件中的 compatible 属性修改设备树下 ft5426 设备节点的 compatible 属性值edt-ft5x06.c 所支持的 compatible 属性列表如下所示:/ |+ _7 ~: V! G5 b" U
static const struct of_device_id edt_ft5x06_of_match[] = {( o9 R; n; R. g! @+ l! x
{ .compatible = "edt,edt-ft5206", },
/ [4 {0 u8 |6 U7 w& A{ .compatible = "edt,edt-ft5306", },- g7 ?8 @9 u) i9 G" S: n/ r3 Y
{ .compatible = "edt,edt-ft5406", },% g) q% v2 A; L# F+ U# l+ m
{ /* sentinel */ }
& F$ e: n" _/ C};1 R5 U8 V$ o% e+ q! W/ Z: ?
可以看出,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 表,在里面添加一条:( r/ I# `  n. o
{ .compatible = "edt,edt-ft5426", }
- `) x4 ~$ r1 W: j1 x$ h总之一句话,让 ft5426 这个设备和 edt-ft5x06.c 这个驱动匹配起来。这里我们修改设备树下的 ft5426设备节点,修改后如下所示;# r* m6 y0 |' w# g8 O) m: p  \' n
1 ft5426: ft5426@38 {
7 T! ~8 F* d( [" G5 @5 j& r. I; x' H2 compatible = "edt,edt-ft5426","edt,edt-ft5406";
" `  b6 a8 N6 @5 J  H# x3 reg = <0x38>;3 V. \  |6 j4 Z0 L
4 pinctrl-names = "default";: v" q' x) K# x2 z! N
5 pinctrl-0 = <&pinctrl_tsc>;
$ [  g. ~. E& r" L& V( i7 w' k0 n8 {6 interrupt-parent = <&gpio1>;3 E7 H4 p- i( O+ ?
7 interrupts = <9 0>;6 p9 Y7 Y2 t4 F' o
8 reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
2 J1 k: s$ D/ \2 T% b5 g3 q9 interrupt-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;; G5 S2 a* N* D0 _6 V" H- U' X9 r
10 };
1 c  ]2 ]' r5 R0 d8 ]; |( q在 compatible 属性中添加"edt,edt-ft5406"兼容值。# M! y- V; }+ w2 J5 _6 Z, T4 t$ {
设备树修改完成后,重新编译。然后使用新的 zImage 和 dtb 设备树文件启动开发板。驱动正常的情况,有如下启动信息:# N8 L. B0 n( y3 y. C0 ?, ^
9 ^# U: t# m3 ~3 ?8 b
然后可以使用下面的命令查看 input 设备的具体情况:
4 e8 L# K( ~( Q) @cat /proc/bus/input/devices: N: N6 s; l/ a  |# \
结果如图:
- {& |* y& a- G2 j! N9 M  a  @! F  n- X3 V
然后可以使用 hexdump 或者 ts_test_mt 命令进行测试。9 s0 N2 J2 c9 u, q9 W" ~
+ t  T: }% o0 g6 ?0 E

5 b4 t  n  }4 A8 w" I( e8 K6 s1 J3 r* t: p  I

作者: nolita    时间: 2020-12-7 11:25
                          




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2