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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
54.5 Tslib  移植和使用
4 D6 U1 @; H) [" s3 B& Gft5426 触摸驱动添加成功后,发现触摸可能不太准确,这时可以使用一个第三方开源库 tslib 来调试触摸屏。下面来看一下 tslib 源码如何移植。4 t8 n( s! a0 y
54.5.1  获取 tslib  源码
6 M9 ^8 s# Y; Z1 J2 {9 [tslib 源码可以从官方地址获取:https://github.com/libts/tslib,打开网址可以看到最新的版本是 1.21,可以从官网获取,也可以从网盘资料中获取,资料路径:i.MX6UL 终结者光盘资料/06_Linux 驱动例程/第三方库源码/tslib-1.21.tar.bz2。获取到 tslib 源码后,拷贝到 Ubuntu 系统下并解压,得到 tslib-1.21 文件夹。$ K$ _1 H. B% F. {( f, o0 o7 s
54.5.2  编译 tslib
0 [1 P* e* n9 ?& N( X$ K) |* s获取到 tslib 源码后,可以编译 tslib 源码,具体有下面几个步骤。, ]" O- g3 l  H% J# T+ R
1、修改 tslib 源码所属用户/ o/ P) v0 A6 B$ S. }' S. T1 \
修改解压得到的 tslib-1.21 目录所属用户为当前用户,如果不修改可能会在稍后的编译中会遇到各种问题。我当前 ubuntu 的登录用户名为“topeet”,那么修改命令如下:3 Z8 E; E, m, C
sudo chown topeet:topeet tslib-1.21 -R修改后如图 54.5.2.1 所示:' G( C5 E0 f- {

- }1 p) X3 m& q- u  H6 g% [  n' Z/ ~! o2、Ubuntu 工具安装6 \, F" @" s5 c( a
编译 tslib 的时候需要先在 ubuntu 中安装一些文件,防止编译 tslib 过程中出错,命令如下所示:( j( q+ i: E3 U% k1 [4 ?3 y, _
sudo apt-get install autoconf& f! @: [9 S" B5 f5 H* `
sudo apt-get install automake- t- T, K" q2 X/ B8 z0 m  X
sudo apt-get install libtool/ h& q# l  d5 X% q- o$ Z
3、编译 tslib0 \& i* E' u8 f. T8 s' O
首先创建一个 tslib 文件夹,用于存放编译结果。比如文件路径为:/home/topeet/tslib# j' p! T! J+ j: }, ?# w: a$ v
然后使用下列命令配置并编译 tslib:
! G  J6 k7 R& ?/ T( Ucd tslib-1.21/ //进入 tslib 源码目录
" n* I. b& D, i' C' _7 z./configure --host=ARM-none-linux-gnueabi --prefix=/home/topeet/tslib
. y: k9 _4 U0 I9 N6 a* M8 Cmake //编译4 n8 o  Q" {* I; z
make install //安装
3 |& \' n0 C2 }2 w注意,在使用./configure 配置 tslib 的时候“--host”参数指定编译器,指定的编译器要和编译文件系统使用同一个编译器,否则在开发板下不能正常使用。“--prefix”参数指定编译完成以后的 tslib 文件安装到哪里,这里肯定是安装到我们刚刚创建的“tslib”目录下。
% H. g# b  W6 h4 b3 _, h8 {编译完成后 tslib 目录如图 54.5.2.2 所示:
1 T( _7 v7 V# }5 |9 G4 h
/ F" Q) ^3 Q' A9 ]然后将 tslib 目录下的所有文件拷贝到开发板的根文件系统下。如果直接拷贝的话会出现符号链接文件不能拷贝的现象,可以先使用 tar 命令进行打包,然后解压到根文件系统下。命令如下:2 g/ W  e! ]6 F* S
tar -czvf lib.tar.gz * //打包生成 lib.tar.gz 压缩包
3 l# ^3 ~1 e4 ^  q) Mtar -xvf lib.tar.gz / //解压到开发板根文件目录下4 g  C2 K5 c8 e& V, |
54.5.3  测试 tslib
, _# u; k1 ^6 V7 Y! M; H: x当把编译好的 tslib 拷贝到开发板后,进行命令测试。
& R- |" [9 P# ]; |# X1、配置 tslib  `: C: h- e) I2 f7 V1 i' ~
打开/etc/ts.conf 文件,找到下面这一行:& G9 J& A2 @* S( L
module_raw input1 f. z5 a# w- B4 X+ X/ K& F3 L; a
如果上面这句前面有“#”的话就删除掉“#”。& C2 ^, [- j* H% C, Z
打开/etc/profile 文件,在里面加入如下内容:' d( a) X  V: f+ H6 w
1 export TSLIB_TSDEVICE=/dev/input/event1
! a* A8 {7 d( ^' a- }, c2 export TSLIB_CALIBFILE=/etc/pointercal7 L6 F; ?$ E+ \8 d/ m2 J9 s
3 export TSLIB_CONFFILE=/etc/ts.conf6 Z- y2 L4 p8 d1 u( s
4 export TSLIB_PLUGINDIR=/lib/ts
- n# u" p) ~4 U8 C/ M5 export TSLIB_CONSOLEDEVICE=none
+ t3 j: R- p" C% ?5 f! A6 export TSLIB_FBDEVICE=/dev/fb0  R9 j3 F5 [; N/ r8 c7 F6 j2 p& v
第 1 行,TSLIB_TSDEVICE 表示触摸设备文件,这里设置为/dev/input/event1,这个要根据具体情况设置,如果你的触摸设备文件为 event2 那么就应该设置为/dev/input/event2,以此类推。
' C( l0 W2 M4 `第 2 行,TSLIB_CALIBFILE 表示校准文件,如果进行屏幕校准的话校准结果就保存在这个文件中,这里设置校准文件为/etc/pointercal,此文件可以不存在,校准的时候会自动生成。6 M" d" }8 i& r4 l, q# S
第 3 行,TSLIB_CONFFILE 表示触摸配置文件,文件为/etc/ts.conf,此文件在移植 tslib 的时候会生成。
" N; |0 z2 H" z0 l. ~8 M第 4 行,TSLIB_PLUGINDIR 表示 tslib 插件目录位置,目录为/lib/ts。
+ x4 r, l' v5 x- W! A第 5 行,TSLIB_CONSOLEDEVICE 表示控制台设置,这里不设置,因此为 none。
4 h# y% y" E1 ^4 z$ a* ^& i第 6 行,TSLIB_FBDEVICE 表示 FB 设备,也就是屏幕,根据实际情况配置,我的屏幕文件为/dev/fb0,因此这里设置为/dev/fb0。, m, E4 H& T, p! ^
全部配置好以后重启开发板,然后就可以进行测试了。
* O7 P5 ~0 q& [" L) ?* O! l4 D6 F2、 测试 tslib/ I( [' q7 a( @- p* f! N
开发板重新启动后,可以先进行校准,使用下面的命令:, I7 E$ \  m  k4 b; I* A* `- a. F* ]
ts_calibrate) [' D1 V% S7 U. {: y( K! Z
校准完成后,会生成/etc/pointercal 文件,如果想重新校准,可以直接删除/etc/pointercal 文件,重新执行校准命令。
$ ]" f1 M/ t  v6 Q; k1 p' |然后可以使用 ts_test_mt 这个命令来测试触摸屏工作是否正常,以及多点触摸是否有效,执行如下所示命令:
1 m; F* D' d: Q( ^/ q# pts_test_mt# z5 g1 b+ S. j' i$ I4 a9 L
命令执行后会打开一个测试界面,如图 54.5.3.1 所示:
1 f; S* f$ |* c! P0 Q2 K* p: E( I9 M' L
上图中有三个按钮“Drag”、“Draw”和“Quit”,这三个按钮的功能如下:+ ^) z' I# D- i0 m  T" m( s8 |+ `
Drag:拖拽按钮,默认就是此功能,大家可以看到屏幕中间有一个十字光标,我们可以通过触摸屏幕来拖拽此光标。一个触摸点一个十字光标,对于 5 点电容触摸屏,如果 5 个手指都放到屏幕上,那么就有 5个光标,一个手指一个。0 }! d5 S9 z! f2 u2 V
Draw:绘制按钮,按下此按钮我们就可以在屏幕上进行简单的绘制,可以通过此功能检测多点触摸工作是否正常。
$ a& K: C( F: \* m- p1 m/ Q  y- pQuit:退出按钮,退出 ts_test_mt 测试软件。
. v9 l6 u& b) Q5 g% e, J0 K% }54.6  使用 Linux  内核自带的 ft5426  驱动; S# Q0 T# J/ F! M: H
在 Linux 内核中集成了许多电容触摸芯片的驱动,其中就包括我们使用的 ft5426 的驱动。所以我们来使用一下 Linux 内核自带的 ft5426 驱动文件。在使用之前需要先将前面我们添加的 ft5426.c 驱动文件去除掉,只 需 要 修 改 drivers/input/touchscreen/Makefile 这个文件即可,将下面这一行删除掉:
& Z; |4 \7 i( pobj-y += ft54266.o
5 w5 w5 W% ^) m2 m5 y内核自带的 ft5426 的驱动文件为 drivers/input/touchscreen/edt-ft5x06.c。; o2 `+ F' N" \1 M, j
1、使能内核 ft5426  驱动配置
. C" S0 s, ]$ c2 w  {- P, T要使用 Linux 内核自带的驱动,需要添加 Linux 内核配置。首先打开图形化配置界面,命令如下:
. D9 E: b9 e9 N, Q8 U9 Xmake ARCH=arm menuconfig& z' _- l6 Q  N+ ~, k
配置路径如下:
2 F8 q- B+ [5 ^  t3 M" n0 b$ EDevice Drivers --->7 z1 Z& I6 D4 |3 G
Input device support --->2 D# ?$ W" K# G2 F, @6 y, W& m6 c
Touchscreens --->! ^# u- v9 K, t
<*> EDT FocalTech FT5x06 I2C Touchscreen support
2 k$ Y) j) C6 d4 d! p. {配置如图 所示:
7 E% L  y& ^- ^3 _
/ h/ [; d+ b( r- s$ m! I" X配置完成后重新编译 Linux 内核,生成 zImage 镜像。6 y$ r; _; C" I/ r1 J+ v
2、  修改设备树文件
7 I' C2 w2 a4 u7 c, _7 P我们要根据 edt-ft5x06.c 文件中的 compatible 属性修改设备树下 ft5426 设备节点的 compatible 属性值edt-ft5x06.c 所支持的 compatible 属性列表如下所示:3 g& K- k+ v; i5 u) `
static const struct of_device_id edt_ft5x06_of_match[] = {
! g$ V( i) k; t0 ]9 X  h- h{ .compatible = "edt,edt-ft5206", },
* n# L- S% P! @{ .compatible = "edt,edt-ft5306", },
  ?$ I" }/ P/ d: r5 B{ .compatible = "edt,edt-ft5406", },
9 z* B  s# P$ N4 _( z{ /* sentinel */ }
- W: N4 w+ l1 r0 W/ r" u};/ v7 G' Y1 q, h7 r" E
可以看出,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 表,在里面添加一条:
9 X( K- m- G9 Y7 z# g& G{ .compatible = "edt,edt-ft5426", }
/ \5 n3 q- P3 U8 q! ^: Z* U/ z总之一句话,让 ft5426 这个设备和 edt-ft5x06.c 这个驱动匹配起来。这里我们修改设备树下的 ft5426设备节点,修改后如下所示;4 W. Y* Z1 ]1 Y, r* @7 e' G
1 ft5426: ft5426@38 {3 R& E# G. |; M2 a. ]5 ^7 O6 E
2 compatible = "edt,edt-ft5426","edt,edt-ft5406";9 u1 x1 s5 a8 H! H9 w
3 reg = <0x38>;
4 M5 e6 Y  S* ^4 pinctrl-names = "default";
. m) j4 B( a2 e9 L/ ~5 pinctrl-0 = <&pinctrl_tsc>;+ m3 p9 S1 U* |$ R$ t
6 interrupt-parent = <&gpio1>;
8 O6 y5 h4 ?$ ?: z: ]6 l; ~7 interrupts = <9 0>;
+ ]) O7 D0 z/ X* v2 p9 i* O. F& K8 reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;* ]% r5 @9 E' z! h1 M6 h  U
9 interrupt-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
% \1 k+ N/ k# d- U' n10 };
' y7 \$ A# e" V% o在 compatible 属性中添加"edt,edt-ft5406"兼容值。, g; `* a. t3 n+ s9 I+ K) C
设备树修改完成后,重新编译。然后使用新的 zImage 和 dtb 设备树文件启动开发板。驱动正常的情况,有如下启动信息:8 u( _  M9 }6 l4 s8 z) n  A0 E

0 t, o' ^/ m7 D  e+ e. d0 _然后可以使用下面的命令查看 input 设备的具体情况:/ B2 [- Q: ^  ^2 c' y% ]
cat /proc/bus/input/devices7 g; V: M4 K4 ]
结果如图:
8 T! u. L# s# h  \) W" d2 I
! C2 ~2 X- C0 @. i然后可以使用 hexdump 或者 ts_test_mt 命令进行测试。
0 H9 `/ R  g8 O8 p
9 n" O( k3 ^! L3 [# M
4 x7 M2 f8 h% C% u  `) J: _
4 u' t; p+ s* U

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-25 00:47 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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