Linux学习第45天:Linux 多点电容触摸屏实验(三):难忘记第一次牵你手的温存

Linux版本号4.1.15   芯片I.MX6ULL                                    大叔学Linux    品人间百味  思文短情长 


        本章的思维导图如下:

五、tslib移植与使用

        通过 tslib 来直观的测试多点电容触摸屏驱动。

1、tslib移植

1)、获取tslib源码

        git 地址为 https://github.com/kergoth/tslib


2)、修改tslib源码所属用户

        修改解压得到的 tslib-1.21 目录所属用户为当前用户:

sudo chown zuozhongkai:zuozhongkai tslib-1.21 -R

3)、ubuntu工具安装

sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool

4)、编译tslib

        首先在 ubuntu 中创建一个名为“ tslib”的目录存放编译结果,比如我们创建的 tslib 目录全
路径为: /home/zuozhongkai/linux/IMX6ULL/tool/tslib。

        配置并编译talib:

cd tslib-1.21/ //进入 tslib 源码目录
./autogen.sh
./configure --host=arm-linux-gnueabihf --prefix=/home/zuozhongkai/linux/IMX6ULL/tool/tslib
make //编译
make install //安装

        使用./configure 配置 tslib 的时候“ --host”参数指定编译器,“ --prefix”参数指定编
译完成以后的 tslib 文件安装到哪里。

        bin 目录下是可执行文件,包括 tslib 的测试工具。 etc 目录下是 tslib 的配置文件, lib 目录
下是相关的库文件。将下图 中的所有文件拷贝到开发板的根文件系统中,

命令如下:

sudo cp * -rf /home/zuozhongkai/linux/nfs/rootfs

 5)、配置tslib

打开/etc/ts.conf 文件,找到下面这一行:
module_raw input

1 export TSLIB_TSDEVICE=/dev/input/event1//TSLIB_TSDEVICE 表示触摸设备文件
2 export TSLIB_CALIBFILE=/etc/pointercal/*TSLIB_CALIBFILE 表示校准文件,如果进行屏幕校准的话校准结果就保存在这
个文件中,这里设置校准文件为/etc/pointercal,此文件可以不存在,校准的时候会自动生成。*/
3 export TSLIB_CONFFILE=/etc/ts.conf/*TSLIB_CONFFILE 表示触摸配置文件,文件为/etc/ts.conf,此文件在移植 tslib 的
时候会生成。*/
4 export TSLIB_PLUGINDIR=/lib/ts/*TSLIB_PLUGINDIR 表示 tslib 插件目录位置,目录为/lib/ts。*/
5 export TSLIB_CONSOLEDEVICE=none/*TSLIB_CONSOLEDEVICE 表示控制台设置,这里不设置,因此为 none。*/
6 export TSLIB_FBDEVICE=/dev/fb0/*TSLIB_FBDEVICE 表示 FB 设备,也就是屏幕,根据实际情况配置,我的屏幕文
件为/dev/fb0,因此这里设置为/dev/fb0。*/

6)、tslib测试

        电阻屏的话,输入命令:

ts_calibrate

        校准完成以后如果不满意,或者不小心对电容屏做了校准,那么直接删除掉/etc/pointercal
文件即可。

        使用 ts_test_mt 这个软件来测试触摸屏工作是否正常,以及多点触摸是否有效,执行如下所示命令:
ts_test_mt

        打开测试界面进行测试。

                Drag: 拖拽按钮

                Draw: 绘制按钮

六、使用内核自带的驱动

1、修改edt-ft5x06.c

2、使能内核自带的FT5X06驱动

        图形化配置make menuconfig

        配置路径:

Location:
-> Device Drivers
-> Input device support
-> Generic input layer (needed for keyboard, mouse, ...) (INPUT [=y])
-> Touchscreens (INPUT_TOUCHSCREEN [=y])
-> <*> EDT FocalTech FT5x06 I2C Touchscreen support
 

3、修改设备树

        ft5426 这个设备节点,需要在里面添加 compatible 属性:

static const struct of_device_id edt_ft5x06_of_match[] = {
{ .compatible = "edt,edt-ft5206", },
{ .compatible = "edt,edt-ft5306", },
{ .compatible = "edt,edt-ft5406", },
{ /* sentinel */ }
};

        修改设备树中的ft5426这个节点:

1 ft5426: ft5426@38 {
2 compatible = "edt,edt-ft5426","edt,edt-ft5406";
3 reg = <0x38>;
4 pinctrl-names = "default";
5 pinctrl-0 = <&pinctrl_tsc>;
6 interrupt-parent = <&gpio1>;
7 interrupts = <9 0>;
8 reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
9 interrupt-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
10 };

        修改完成以后重新编译设备树,然后使用新得到的.dtb 和 zImage 文件启动 linux 内核。
        直接运行 ts_test_mt 来测试触摸屏是否可以使用。
 

七、4.3.寸屏触摸驱动实验

                触摸驱动 IC GT9147

1、修改设备树pinctrl_tsc节点内容

        pinctrl_tsc 节点用于保存触摸屏的中断和复位引脚配置信息:

1 pinctrl_tsc: tscgrp {
2 fsl,pins = <
3 /* 4.3 寸 RGB 屏幕,GT9147 */
4 MX6UL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x10B0 /* TSC_RST */
5 MX6UL_PAD_GPIO1_IO09__GPIO1_IO09 0x10B0 /* TSC_INT */
6 >;

2、在设备树的i2c2节点下添加tgt9147子节点

1 gt9147:gt9147@14 {
2 compatible = "goodix,gt9147", "goodix,gt9xx";
3 reg = <0x14>;
4 pinctrl-names = "default";
5 pinctrl-0 = <&pinctrl_tsc>;
6 interrupt-parent = <&gpio1>;
7 interrupts = <9 0>;
8 reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
9 interrupt-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
10 status = "okay";
11 };

3、修改设备树的lcdif节点

        4.3 寸800*480 和 480*272 这两款屏幕对应的 lcdif 节点分别如下所示:

1 /* 4.3 寸 480*272 */
2 &lcdif {
3 pinctrl-names = "default";
4 pinctrl-0 = <&pinctrl_lcdif_dat
5 &pinctrl_lcdif_ctrl>;
6
7 display = <&display0>;
8 status = "okay";
9
10 display0: display {
11 bits-per-pixel = <24>;
12 bus-width = <24>;
13
14 display-timings {
15 native-mode = <&timing0>;
16 timing0: timing0 {
17 clock-frequency = <9000000>;
18 hactive = <480>;
19 vactive = <272>;
20 hfront-porch = <5>;
21 hback-porch = <40>;
22 hsync-len = <1>;
23 vback-porch = <8>;
24 vfront-porch = <8>;
25 vsync-len = <1>;
26
27 hsync-active = <0>;
28 vsync-active = <0>;
29 de-active = <1>;
30 pixelclk-active = <0>;
31 };
32 };
33 };
34 };
35
36 /* 4.3 寸 800*480 */
37 &lcdif {
38 pinctrl-names = "default";
39 pinctrl-0 = <&pinctrl_lcdif_dat
40 &pinctrl_lcdif_ctrl>;
41
42 display = <&display0>;
43 status = "okay";
44
45 display0: display {
46 bits-per-pixel = <24>;
47 bus-width = <24>;
48
49 display-timings {
50 native-mode = <&timing0>;
51 timing0: timing0 {
52 clock-frequency = <31000000>;
53 hactive = <800>;
54 vactive = <480>;
55 hfront-porch = <40>;
56 hback-porch = <88>;
57 hsync-len = <48>;
58 vback-porch = <32>;
59 vfront-porch = <13>;
60 vsync-len = <3>;
61
62 hsync-active = <0>;
63 vsync-active = <0>;
64 de-active = <1>;
65 pixelclk-active = <0>;
66 };
67 };
68 };
69 };

      设备树修改完成以后重新编译设备树并用新的设备树启动,检查一下 LCD 是否驱动成
功,如果不成功的话检查 lcdif 节点配置。
 

4、编译GT9147驱动文件

        gt9147.c 里面的驱动是单点触摸的。

八、总结

        本章的内容比较多,既包括基础知识,又包括驱动开发、tslib移植与使用,还包括Linux内核自带触摸屏驱动的使用,以及不同分辨率4.3寸触摸屏的驱动开发与测试。


本文为参考正点原子开发板配套教程整理而得,仅用于学习交流使用,不得用于商业用途。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值