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寸触摸屏的驱动开发与测试。


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/177582.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

语音识别技术在医疗行业中的应用案例

随着语音识别技术和计算机视觉技术的不断提高&#xff0c;现代医学正在进入全面数字化时代。 追求高质量的训练数据是人工智能产业的信条&#xff0c;得到更为精准的语音机器模型更离不开语音数据的不断供给。本文讲介绍: 什么是语音识别技术语音识别技术如何应用于医疗行业 …

【办公常识】写好的代码如何上传?使用svn commit

首先找到对应的目录 找到文件之后点击SVN Commit

基于天鹰算法优化概率神经网络PNN的分类预测 - 附代码

基于天鹰算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于天鹰算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于天鹰优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

python解决登录图形验证码

摘要:测试过程中经常遇到图片验证码,以下主要是调用百度OCR图片识别获取验证码,实现登录 1、百度云申请创建应用

shopee数据分析软件:了解市场趋势,分析竞争对手,优化运营策略

在当今数字化时代&#xff0c;数据已经成为了企业决策的重要依据。对于电商行业来说&#xff0c;数据更是至关重要。如果你想在电商领域中脱颖而出&#xff0c;那么你需要一款强大的数据分析工具来帮助你更好地了解市场、分析竞争对手、优化运营策略。而知虾数据软件就是这样一…

大二第五周总结

你知道的&#xff0c;向来如此&#xff0c;从来没人关心&#xff0c;世人从来只看重结果。对你了解越多的人&#xff0c;往你心里面捅刀子的时候也是最狠&#xff0c;不过跟之前不一样了&#xff0c;又不是曾经那个任人欺负的小孩儿了&#xff0c;所有的努力在别人眼里就是屁都…

centos7安装MySQL—以MySQL5.7.30为例

centos7安装MySQL—以MySQL5.7.30为例 本文以MySQL5.7.30为例。 官网下载 进入MySQL官网&#xff1a;https://www.mysql.com/ 点击DOWNLOADS 点击链接&#xff1b; 点击如上链接&#xff1a; 选择对应版本&#xff1a; 点击下载。 安装 将下载后的安装包上传到/usr/local下…

网工内推 | 合资公司网工,CCNP/HCIP认证优先,朝九晚六

01 中企网络通信技术有限公司 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、按照工作流程和指引监控网络运行情况和客户连接状况&#xff1b; 2、确保各监控系统能正常运作&#xff1b; 3、快速响应各个网络告警事件&#xff1b; 4、判断出网络故障&#xff0c;按…

sqlserver==索引解析,执行计划,索引大小

1创建测试表 -- 创建大型表 CREATE TABLE LargeTableWithIndex (ID int IDENTITY(1,1) PRIMARY KEY,IndexedColumn int,NonIndexedColumn nvarchar(255),OtherData nvarchar(255) );2插入测试数据 -- 使用 T-SQL 插入大量数据 DECLARE @i int = 1; WHILE @i <= 100000 -- …

git常用命令(git github ssh)

目录 1、语法说明2、本地仓库相关操作建立一个git文件(git init)把工作区的文件添加到暂存区(git add)把暂存区的文件添加到本地仓库(git commit)查看暂存区和本地仓库中的文件(git ls-files)查看文件夹下所有文件的状态(git status)查看版本库中的提交记录(git log)恢复的文件…

基于原子轨道搜索算法优化概率神经网络PNN的分类预测 - 附代码

基于原子轨道搜索算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于原子轨道搜索算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于原子轨道搜索优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xf…

还记得高中生物书上的莫斯密码吗?利用Python破解摩斯密码的代码示例!

文章目录 前言摩尔斯电码Python实现摩斯密码对照表加密解密测试 完整代码总结关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Py…

依赖库:Ceres-solver-2.0.0安装

依赖库&#xff1a;Ceres-solver-2.0.0安装 前言安装ceres-solver-2.0.0验证 前言 Ceres Solver是谷歌开源的C非线性优化库&#xff0c;能够解决有约束或无约束条件下的非线性最小二乘问题。2010年之后大量的运用在谷歌的产品开发中&#xff0c;尤其在谷歌开源的cartographer中…

[补题记录] Complete the Permutation(贪心、set)

URL&#xff1a;https://codeforces.com/group/OcmZ7weh45/contest/487583/problem/J 目录 Problem/题意 Thought/思路 Code/代码 Problem/题意 给出一个长度为 N 的序列&#xff0c;其中的元素都是奇数。 现在要求在两个奇数之间插入一个偶数&#xff0c;使得这三个数递增…

矩阵知识补充

正交矩阵 定义&#xff1a; 正交矩阵是一种满足 A T A E A^{T}AE ATAE的方阵 正交矩阵具有以下几个重要性质&#xff1a; A的逆等于A的转置&#xff0c;即 A − 1 A T A^{-1}A^{T} A−1AT**A的行列式的绝对值等于1&#xff0c;即 ∣ d e t ( A ) ∣ 1 |det(A)|1 ∣det(A)∣…

VPS配置了swap没发挥作用怎么办

1 swap配置了但没用上 我的服务器内存是2G&#xff0c;装多一点东西就不够用&#xff0c;于是我给他分配了2G的swap&#xff0c;等了几小时&#xff0c;swap还是一点都没有使用 Linux中Swap&#xff08;即&#xff1a;交换分区&#xff09;&#xff0c;类似于Windows的虚拟内存…

C++电脑组装项目(涉及知识点:多态)

需求&#xff1a; #include <iostream> #include "Computer.h" #include "AbstractCpu.h" #include "AbstractMemory.h" #include "AbstractVideoCard.h" #include "IntelCpu.h" #include "IntelMemory.h" …

【LeetCode刷题】--39.组合总和

39.组合总和 本题详解&#xff1a;回溯算法剪枝 class Solution {public List<List<Integer>> combinationSum(int[] candidates, int target) {int len candidates.length;List<List<Integer>> res new ArrayList<>();if (len 0) {return r…

二、类与对象(二)

8 this指针 8.1 this指针的引入 我们先来定义一个日期的类Date&#xff1a; #include <iostream> using namespace std; class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}void Print(){cout << _year <&l…

【Python】数据类型和切片的零碎知识点

1. 数据类型 pow(a, b, c) # a^b % c print("happy {}".format(name))数字类型包括整数&#xff0c;浮点数&#xff0c;复数 0x9a表示十六进制数&#xff08;0x&#xff0c;0X开头表示十六进制&#xff09; 0b1010&#xff0c;-0B101表示二进制数&#xff08;0…