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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
54.5 Tslib  移植和使用
  S/ f3 n: V' `% wft5426 触摸驱动添加成功后,发现触摸可能不太准确,这时可以使用一个第三方开源库 tslib 来调试触摸屏。下面来看一下 tslib 源码如何移植。
0 N+ W5 ^1 H: p1 [54.5.1  获取 tslib  源码
) v/ M; w2 h& ftslib 源码可以从官方地址获取:https://github.com/libts/tslib,打开网址可以看到最新的版本是 1.21,可以从官网获取,也可以从网盘资料中获取,资料路径:i.MX6UL 终结者光盘资料/06_Linux 驱动例程/第三方库源码/tslib-1.21.tar.bz2。获取到 tslib 源码后,拷贝到 Ubuntu 系统下并解压,得到 tslib-1.21 文件夹。
" c, u  \, S/ s4 Q% @0 T54.5.2  编译 tslib/ v: _, _0 P( y) s* l7 `& n( L
获取到 tslib 源码后,可以编译 tslib 源码,具体有下面几个步骤。: |+ h% I" o7 a& M& {+ q, Q+ d$ T
1、修改 tslib 源码所属用户7 V1 j8 h5 |" W1 d0 ~" H# ~
修改解压得到的 tslib-1.21 目录所属用户为当前用户,如果不修改可能会在稍后的编译中会遇到各种问题。我当前 ubuntu 的登录用户名为“topeet”,那么修改命令如下:
5 [5 R7 D: H/ m2 C: T0 x! lsudo chown topeet:topeet tslib-1.21 -R修改后如图 54.5.2.1 所示:
2 C0 r) Y+ y% O0 o* |5 B
, ?4 y. j/ n4 x7 o% j; w- r2、Ubuntu 工具安装! r- p/ d$ H* H  p7 f$ A
编译 tslib 的时候需要先在 ubuntu 中安装一些文件,防止编译 tslib 过程中出错,命令如下所示:
7 X- D2 X& I7 x! J5 N8 \sudo apt-get install autoconf
& \/ G2 ~, m% W/ O4 D6 Qsudo apt-get install automake; _- O0 x, b% H& ]1 M& S
sudo apt-get install libtool
2 F$ b1 W) S, N2 z3、编译 tslib8 E; D: B' l' [
首先创建一个 tslib 文件夹,用于存放编译结果。比如文件路径为:/home/topeet/tslib# u2 e) o3 `. N( h
然后使用下列命令配置并编译 tslib:: [& m' I& J( D: Q* ]* R9 N' w; C4 r
cd tslib-1.21/ //进入 tslib 源码目录
% |  J( v5 p: l- v./configure --host=ARM-none-linux-gnueabi --prefix=/home/topeet/tslib6 J. i  d7 \" v3 I' J1 L' h
make //编译- D" G$ o. D1 b- D( K( l
make install //安装
, L/ B- d" q6 Y3 k( h注意,在使用./configure 配置 tslib 的时候“--host”参数指定编译器,指定的编译器要和编译文件系统使用同一个编译器,否则在开发板下不能正常使用。“--prefix”参数指定编译完成以后的 tslib 文件安装到哪里,这里肯定是安装到我们刚刚创建的“tslib”目录下。
4 V+ P' I' t4 b( c9 G& a, {编译完成后 tslib 目录如图 54.5.2.2 所示:
" M+ C( Z$ D; f: J/ X; z( K: ]6 X, S9 g( a) q' \) M4 H
然后将 tslib 目录下的所有文件拷贝到开发板的根文件系统下。如果直接拷贝的话会出现符号链接文件不能拷贝的现象,可以先使用 tar 命令进行打包,然后解压到根文件系统下。命令如下:
1 F6 t" ?  g7 ?. x' Atar -czvf lib.tar.gz * //打包生成 lib.tar.gz 压缩包# Z5 N9 W( B8 z' t) o/ Q0 p
tar -xvf lib.tar.gz / //解压到开发板根文件目录下
1 I2 q5 g# B) R/ B7 x$ D. N54.5.3  测试 tslib
) q( _4 p& _4 U4 L" Z+ m当把编译好的 tslib 拷贝到开发板后,进行命令测试。$ u( J0 {. u( b/ @/ w6 t
1、配置 tslib8 k' V4 K3 p+ W2 q# U: y7 ]5 L
打开/etc/ts.conf 文件,找到下面这一行:: r( b0 d) I* G3 w4 h/ ^
module_raw input
% U) Y- n/ {: W% W如果上面这句前面有“#”的话就删除掉“#”。
- i4 r+ H7 H; u打开/etc/profile 文件,在里面加入如下内容:6 {( l' P9 m5 O# y4 _1 }* J
1 export TSLIB_TSDEVICE=/dev/input/event1
8 I7 o$ I  _: {: I( P0 u  J6 n2 export TSLIB_CALIBFILE=/etc/pointercal
1 z1 E& Q) u, _6 b0 L3 export TSLIB_CONFFILE=/etc/ts.conf% ?* u0 _; V* A7 X: c% U; J1 x, l
4 export TSLIB_PLUGINDIR=/lib/ts8 G" i' u6 T, `7 U( ~2 \1 {
5 export TSLIB_CONSOLEDEVICE=none
: p4 w& Y1 v/ A& W. u6 export TSLIB_FBDEVICE=/dev/fb0" q$ w$ v8 Z3 o$ J
第 1 行,TSLIB_TSDEVICE 表示触摸设备文件,这里设置为/dev/input/event1,这个要根据具体情况设置,如果你的触摸设备文件为 event2 那么就应该设置为/dev/input/event2,以此类推。
7 D$ [& M2 L. U第 2 行,TSLIB_CALIBFILE 表示校准文件,如果进行屏幕校准的话校准结果就保存在这个文件中,这里设置校准文件为/etc/pointercal,此文件可以不存在,校准的时候会自动生成。
* i1 N" |5 t# I7 ?第 3 行,TSLIB_CONFFILE 表示触摸配置文件,文件为/etc/ts.conf,此文件在移植 tslib 的时候会生成。
& w6 x- ^9 _  Z' I, Z第 4 行,TSLIB_PLUGINDIR 表示 tslib 插件目录位置,目录为/lib/ts。
) g0 i( q; d; v  n5 N+ y第 5 行,TSLIB_CONSOLEDEVICE 表示控制台设置,这里不设置,因此为 none。
' k& p+ ~/ m( U+ k  l第 6 行,TSLIB_FBDEVICE 表示 FB 设备,也就是屏幕,根据实际情况配置,我的屏幕文件为/dev/fb0,因此这里设置为/dev/fb0。
' _! k* X& n% y7 n9 Z- H全部配置好以后重启开发板,然后就可以进行测试了。, d7 U- }9 o, ~$ F8 b7 I: Z
2、 测试 tslib4 J2 ~0 ]" M9 V: J: I4 F0 O# ^% S
开发板重新启动后,可以先进行校准,使用下面的命令:
, ?2 q% S# ?# T8 r4 _/ sts_calibrate/ G. h3 ^' [2 \1 [( j
校准完成后,会生成/etc/pointercal 文件,如果想重新校准,可以直接删除/etc/pointercal 文件,重新执行校准命令。9 N3 S! K- D2 Y( I! o2 S  P
然后可以使用 ts_test_mt 这个命令来测试触摸屏工作是否正常,以及多点触摸是否有效,执行如下所示命令:' R0 w5 H9 S( X$ v
ts_test_mt
8 l9 J. l, L  ~命令执行后会打开一个测试界面,如图 54.5.3.1 所示:
$ X2 w1 O& b' X. E6 D
. W0 @* [" e% u" R9 x! |2 N上图中有三个按钮“Drag”、“Draw”和“Quit”,这三个按钮的功能如下:
# n0 M9 ~  l* u; B( ~* GDrag:拖拽按钮,默认就是此功能,大家可以看到屏幕中间有一个十字光标,我们可以通过触摸屏幕来拖拽此光标。一个触摸点一个十字光标,对于 5 点电容触摸屏,如果 5 个手指都放到屏幕上,那么就有 5个光标,一个手指一个。
1 O% O8 v; ~+ Y. d7 O' P9 O: WDraw:绘制按钮,按下此按钮我们就可以在屏幕上进行简单的绘制,可以通过此功能检测多点触摸工作是否正常。
8 M& Y: r6 j2 L% O* P4 ~! sQuit:退出按钮,退出 ts_test_mt 测试软件。5 ?, x  ^) d+ b# Q6 z! v( [
54.6  使用 Linux  内核自带的 ft5426  驱动+ d+ n8 s# r& z0 o
在 Linux 内核中集成了许多电容触摸芯片的驱动,其中就包括我们使用的 ft5426 的驱动。所以我们来使用一下 Linux 内核自带的 ft5426 驱动文件。在使用之前需要先将前面我们添加的 ft5426.c 驱动文件去除掉,只 需 要 修 改 drivers/input/touchscreen/Makefile 这个文件即可,将下面这一行删除掉:' X+ E6 b3 ]9 i& f
obj-y += ft54266.o
# k. H$ {4 P' k$ A6 p, J4 @内核自带的 ft5426 的驱动文件为 drivers/input/touchscreen/edt-ft5x06.c。4 @! J4 o" V* G" ?0 X4 d9 R
1、使能内核 ft5426  驱动配置
/ c% n7 ?2 Z7 W9 m9 b9 L/ O& I要使用 Linux 内核自带的驱动,需要添加 Linux 内核配置。首先打开图形化配置界面,命令如下:2 m7 v$ s/ K' B+ }" U
make ARCH=arm menuconfig
% r' c$ c" O: J, r. R% P配置路径如下:7 H8 R( [  e# x
Device Drivers --->: f5 P: @7 R: [5 \( o  i  P
Input device support --->
1 O2 C* k# k/ w; E' M. `Touchscreens --->$ E7 j1 B2 _9 d3 v0 S
<*> EDT FocalTech FT5x06 I2C Touchscreen support
( d  M& N  g1 u- [) [/ @配置如图 所示:+ e9 J  H3 l7 A9 i

! a, c! s6 R) l/ c9 X配置完成后重新编译 Linux 内核,生成 zImage 镜像。
/ Z% O! x1 ~  L) M( d3 h2、  修改设备树文件5 w, B- {2 {/ l; D9 L5 e) T6 a
我们要根据 edt-ft5x06.c 文件中的 compatible 属性修改设备树下 ft5426 设备节点的 compatible 属性值edt-ft5x06.c 所支持的 compatible 属性列表如下所示:
3 ~- F9 {. s: a% C/ o0 N7 Sstatic const struct of_device_id edt_ft5x06_of_match[] = {
  K! l0 H( R' @{ .compatible = "edt,edt-ft5206", },
, G0 F! n7 v+ ~. B1 {. o) q: O9 R{ .compatible = "edt,edt-ft5306", },) ^- p' l- l9 _
{ .compatible = "edt,edt-ft5406", },
2 R% E2 L2 }0 t& V{ /* sentinel */ }- r# Y3 o/ u& h, z% E7 b$ L
};
8 \/ ?! y3 U3 D/ o8 v% V( k3 L( S  _可以看出,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 表,在里面添加一条:  n* B1 l' Z9 p( y% ?. n
{ .compatible = "edt,edt-ft5426", }; \- Y+ [' s0 Y1 F# h7 M+ f" o
总之一句话,让 ft5426 这个设备和 edt-ft5x06.c 这个驱动匹配起来。这里我们修改设备树下的 ft5426设备节点,修改后如下所示;9 l8 N) U! {: q' i7 H% k0 z
1 ft5426: ft5426@38 {$ C1 f  d( i, E( \8 V  F! c
2 compatible = "edt,edt-ft5426","edt,edt-ft5406";# {% v4 X  i" M6 N, B- h
3 reg = <0x38>;, N8 E- ]0 [/ k4 N+ I5 ~6 N
4 pinctrl-names = "default";
3 ?  h2 F% Z# G0 S9 z5 pinctrl-0 = <&pinctrl_tsc>;) S" H& @9 d; _2 D9 p! k5 o: E- ~
6 interrupt-parent = <&gpio1>;, S9 P6 m& F5 X
7 interrupts = <9 0>;; a" E, U3 x( m# d5 {8 D
8 reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
$ t- e9 f9 l5 C  c* \2 u9 interrupt-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;+ ]' d5 m  u# d3 V
10 };, P! c: E  x) D9 g: `& |
在 compatible 属性中添加"edt,edt-ft5406"兼容值。% P7 |' f& F3 H# l
设备树修改完成后,重新编译。然后使用新的 zImage 和 dtb 设备树文件启动开发板。驱动正常的情况,有如下启动信息:
3 R' |& y% v& D5 h- j
/ @  |" e/ ~& c% L5 n# u& R然后可以使用下面的命令查看 input 设备的具体情况:+ ?5 E9 ~7 Y0 O4 e0 C
cat /proc/bus/input/devices+ F8 d+ f5 C8 B- @( j7 }! K
结果如图:; N% y* l! w, W
) d: K# g2 O+ x# d1 V" n
然后可以使用 hexdump 或者 ts_test_mt 命令进行测试。+ V5 `, ]1 Y& q& m$ M3 u+ Y
) M" v8 v0 H$ f7 O

7 G) g7 S* ~: H4 _* P, {  q$ N- I
  Y* q* {8 {9 D* L, @, h7 [

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-25 07:51 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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