首页 > 系统相关 >正点原子Linux C应用编程:移植tslib并使其适配7寸LCD1024*600的GT911触摸驱动

正点原子Linux C应用编程:移植tslib并使其适配7寸LCD1024*600的GT911触摸驱动

时间:2024-09-01 17:36:22浏览次数:10  
标签:TOUCHSCREEN LCD1024 600 适配 编译 内核 模块 gt9xx GT9XX

正点原子Linux C应用编程:移植tslib并使其适配7寸LCD1024*600的GT911触摸驱动

作者在学习【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.4时,发现移植tslib后,触摸事件触发不正常。

使用的硬件版本:正点原子 I.MX6U ALPHA V2.4版本底板LCD:正点原子7寸1024*600,型号ATK-MD0700R-1024600

问题描述与解决过程

教程中老师使用的屏幕是ft5x06驱动,查看本屏幕使用的是goodix汇顶公司的gt911,由于linux内核为笔者自行移植,故无gt的驱动,需要自行添加

1. 先将开发板光盘目录下定位到以下目录

例程源码-出厂源码-linux内核源码-drivers/input/touchscreen/gt9xx.c、gt9xx.h

​ 复制这两个文件,放到自己的linux内核的同目录中

2. 编辑Kconfig文件。把驱动加到内核菜单中

vim drivers/input/touchscreen/Kconfig
打开Kconfig,如果没有vim就使用vi、nano

:350
定位到350行

将如下的内容添加

config TOUCHSCREEN_GT9XX
    tristate "GT9XX I2C touchscreen"
    depends on I2C
    help
      Say Y here if you have the GT9XX touchscreen connected to your
      system.

      If unsure, say N.

      To compile this driver as a module, choose M here: the
      module will be called gt9xx.

切记,一定要对齐,参考上下文的格式Kconfig 对格式的检查很严格,否则在编译的时候会报错。

这让我想起了之前编辑linux内核某些c文件时,使用双斜杠//注释会导致编译器报错,同时在for循环中定义变量也是从 C99 标准开始引入的.

在 C 语言中,// 用于单行注释,这是从 C99 标准开始引入的。C99 之前的版本,如 C90(也称为 ANSI C 或 ISO C90),只支持多行注释,即使用 /* 开始和 */ 结束的注释。

所以在修改代码的时候一定要关注内核使用的编译器编译时遵循的具体语言标准!
Kconfig 是 Linux 内核配置系统的一部分,它用于在构建内核时选择要编译的配置选项。Kconfig 文件包含了内核中各种特性、驱动程序和子系统的配置选项,允许开发者根据需要选择启用或禁用特定的功能。

只有配置了Kconfig中GT芯片的部分,在内核目录下执行make menuconfig才能在模块的编译选项中选择把对应的模驱动编译进内核

下面是对上面Kconfig代码的具体解释

  1. config TOUCHSCREEN_GT9XX:这是配置项的名称,TOUCHSCREEN_GT9XX 是该配置项的标识符。
  2. tristate "GT9XX I2C touchscreen":这定义了配置项的类型为三态(tristate),意味着该选项可以被设置为 Y(是,内置于内核)、M(模块,作为可加载模块)、N(否,不编译)。
  3. depends on I2C:这表示该配置项依赖于 I2C 配置项。如果 I2C 没有被选中,这个触摸屏驱动的配置项也不会出现。
  4. help:这是帮助文本,为开发者提供了关于该配置项的额外信息。
    • 如果你的系统中连接了 GT9XX 触摸屏,请在这里选择 Y。
    • 如果你不确定,在这里选择 N。
    • 如果你想将这个驱动编译为一个模块,请在这里选择 M。编译后的模块将被称为 gt9xx

添加后大概是这样的:

3. 编辑Makefile文件

vim drivers/input/touchscreen/Makefile

添加如下代码

obj-$(CONFIG_TOUCHSCREEN_GT9XX)         += gt9xx.o

含义和作用如下:

  • obj-$(CONFIG_TOUCHSCREEN_GT9XX):条件语句,检查内核配置中是否定义了 CONFIG_TOUCHSCREEN_GT9XX 宏。这个宏在内核配置菜单中设置,用于决定是否包含 GT9XX 触摸屏驱动。
  • +=:这个操作符用于向变量 obj 添加新的对象文件。如果条件语句为真(即 CONFIG_TOUCHSCREEN_GT9XX 被设置为 ym),则执行 += 操作。
  • gt9xx.o:编译对象文件名。如果 CONFIG_TOUCHSCREEN_GT9XX 启用,gt9xx.o 将被添加到 obj 变量中,它将被编译并包含在最终的内核或模块中。

在内核构建过程中,make menuconfigmake xconfigmake nconfig 命令会生成一个 .config 文件,其中包含了所有配置选项的设置。CONFIG_TOUCHSCREEN_GT9XX 就是其中的一个选项,它在配置菜单的“Device Drivers” -> “Input device support” -> “Touchscreen devices”下。

如果你选择了该选项(设置为 y 表示直接编译进内核,或 m 表示编译为模块),那么 Makefile 中的这行代码就会生效,gt9xx.o 将被编译并包含在内核或模块中。如果没有选择,那么 CONFIG_TOUCHSCREEN_GT9XX 将不被定义,这行代码也不会有任何效果。

menuconfig只是充当了一个有着交互界面的宏开关配置器,Makefile才真正决定具体编译内容,是构建系统的核心

4. 修改menuconfig

执行make menuconfig,进入以下层级,选中GT9XX I2C touchscreen这个宏,为*星号,编译进内核

  1. 编译进内核 (Y/*):该驱动或功能被编译为内核的一部分,在启动时自动加载。意味着该功能或驱动程序将始终可用,会增加内核的大小和启动时间。适用于那些始终需要并且对启动时间不敏感的驱动程序。
  2. 编译为模块 (M):该驱动或功能被编译为一个单独的模块(.ko 文件),在需要时通过 modprobe 命令动态加载到内核中。这种方式允许系统管理员根据需要添加或移除功能,而不必重新编译整个内核。有助于保持内核的整洁和最小化,只有实际需要的模块才会被加载。

我们的触摸屏为了保证每次上电自动初始化,所以将他编译进内核。

5. 修改设备树

vim arch/arm/boot/dts/imx6ull-alientek-emmc.dts

在arch/arm/boot/dts/imx6ull-alientek-emmc.dts设备树i2c2节点下添加gt9xx的节点。

设备树是与硬件连接的通道,它指定了数据传输通过i2c2总线,gt911芯片i2c地址为0x5D,触摸事件的中断引脚和对应的中断号、复位引脚

        goodix_ts@5d {
                compatible = "goodix,gt9xx";
                reg = <0x5d>;
                status = "okay";
                interrupt-parent = <&gpio1>;
                interrupts = <9 0>;
                pinctrl-0 = <&ts_int_pin
                             &ts_reset_pin>;
                goodix,rst-gpio = <&gpio5 9  GPIO_ACTIVE_LOW>;
                goodix,irq-gpio = <&gpio1 9  GPIO_ACTIVE_LOW>;
        };

要检查gpio1 9有没有在其他地方被使用!

/&gpio1 9

该引脚被注册为中断,在芯片检测到有触摸活动会在这个引脚上发出低电平信号,通知CPU以最快的速度读取触摸的手指坐标
如果被其他设备占用,会产生问题。

在iomuxc节点下最后位置添加以下内容,复用为中断!!!:

                ts_int_pin: ts_int_pin_mux {
                        fsl,pins = <
                                MX6UL_PAD_GPIO1_IO09__GPIO1_IO09        0x79
                        >;
                };

在iomuxc_snvs节点下最后位置添加以下内容,这是复位管脚的复用:

                ts_reset_pin: ts_reset_pin_mux {
                        fsl,pins = <
                                MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09     0x79
                        >;
                };

再检查一次,是否有管脚复用,若没有,执行make编译,拷贝zImage和dtb文件到tftpboot文件夹,上电启动

6. 验证

使用cat /proc/interrupts验证中断号是否被成功注册

可以看到成功注册了中断

再根据【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.4 第十八章 tslib库使用的步骤移植tslib,使用ts_print测试单点触摸,使用ts_test_mt可视化测试触摸屏是否正常!!!

[root@mygo]:~$:ts_print                                                                                                 
7779.538104:    320    400      1                                                                                       
7779.551222:    320    400      1                                                                                       
7779.562483:    320    400      1                                                                                       
7779.574125:    318    399      1                                                                                       
7779.585729:    315    394      1                                                                                       
7779.597377:    310    385      1                                                                           
7779.725341:    335    227      1                                                                                       
7779.736797:    348    215      1    

标签:TOUCHSCREEN,LCD1024,600,适配,编译,内核,模块,gt9xx,GT9XX
From: https://www.cnblogs.com/yuewusayuri/p/18391503

相关文章

  • ios H5页面滚动适配问题
    1.取消页面整体回弹效果给body标签加上fixed就好可以使用document.body动态开关body.fixed{position:fixed;height:100vh;width:100vw;top:0;right:0;box-sizing:border-box;}2.滑动卡住问题问题:滑动时候会卡主不动,短暂静止后或者......
  • 深入理解 C# 中的适配器模式:连接不兼容的世界
    在软件开发中,我们经常会遇到需要将两个不兼容的接口连接在一起的场景。适配器模式(AdapterPattern)作为结构型设计模式之一,提供了一种灵活的解决方案,使得不兼容的接口能够协同工作,从而提高系统的可扩展性和复用性。本文将详细介绍适配器模式的概念、适用场景,并通过一个C#......
  • FANUC A06B-6220-H030#H600 驱动器的优缺点
    优点:高性能:采用先进的数字信号处理器(DSP)作为控制核心,能够实现复杂的控制算法,提供高精度和高响应速度的运动控制。高可靠性:内置多种故障检测和保护电路,如过电压、过电流、过热、欠压等,确保在异常情况下能够自动保护,避免设备损坏。软启动功能减小了启动过程对驱动器的冲击,延长......
  • 【图像去噪(Image Denoising)】关于【图像去噪】专栏的相关说明,包含适配人群、专栏简介
    文章目录前言适配人群专栏简介专栏亮点阅读方法定价理由品质承诺关于更新环境配置去噪概述文章目录资料汇总(持续更新中。。。)问题汇总(持续更新中。。。)前言先思考几个问题:你是否在全网苦寻【图像去噪(ImageDenoising)】的相关资料?你的目标是否是看懂【图像去噪(Image......
  • 国产化适配——人大金仓V8R6(1)
    本文主要记录kingbase安装及存储过程修改相关内容,或有错漏,请指正。原数据库:Mysql8.0.31现数据库:KingbaseESV008R006C008M001B0030onx86_64-pc-linux-gnu,compiledbygcc(GCC)4.8.520150623(RedHat4.8.5-28),64-bit一、kingbase安装1.安装前准备1.1查看系统架构......
  • 一次搞懂数据大屏适配方案 (vw vh、rem、scale)
    当接到可视化大屏需求时,你是否会有以下疑问......
  • 设计模式--适配器模式
    适配器模式适配器模式(AdapterPattern)是一种结构型设计模式,它允许一个接口(通常是新的或现有的)与另一个不兼容的接口一起工作。适配器模式主要用于解决接口不匹配的问题,让原本由于接口不兼容而不能一起工作的类可以一起工作。下面,我将通过一个简单的例子来展示适配器模式的......
  • 国产化适配——银河麒麟V10(2)
    续上文三、nignx安装ng版本是:nginx-1.20.2链接:https://pan.baidu.com/s/1gVJ_YgD-_gyJ6JL2VxoFhA 提取码:bqf4版本比较老了,大家可以自己去官网下载最新的版本使用。官网地址:https://nginx.org/en/download.html1.挂载镜像mount-tiso9660/mnt/tools/Kylin-Server-10-SP2-......
  • 600条最强 Linux 命令总结(珍藏版)
    一、基本命令uname-m显示机器的处理器架构uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件(SMBIOS/DMI)hdparm-i/dev/hda罗列一个磁盘的架构特性hdparm-tT/dev/sda在磁盘上执行测试性读取操作系统信息arch显示机器的处理器架构uname-m显示机......
  • 京东面试:600Wqps高并发ID如何设计?时钟回拨 如何解决?
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......