当前位置: 首页 > article >正文

在i.MX6ULL开发板上,用Buildroot配置Qt5+tslib触摸屏的完整环境搭建笔记

在i.MX6ULL开发板上构建Qt5tslib嵌入式GUI开发环境实战指南当我们需要在资源受限的嵌入式设备上开发图形用户界面时Qt框架凭借其跨平台特性和丰富的功能库成为首选。i.MX6ULL作为一款广泛应用于工业控制、智能家居等领域的ARM Cortex-A7处理器搭配Buildroot构建轻量级Linux系统能够为Qt应用提供稳定高效的运行环境。本文将手把手带你完成从Buildroot配置到Qt应用实际运行的完整流程特别针对触摸屏校准、字体显示等实际部署中的痛点问题提供解决方案。1. 开发环境准备与工具链配置在开始Qt5环境搭建之前我们需要确保基础工具链的兼容性。i.MX6ULL开发板通常采用ARMv7架构而Buildroot 2023.02版本中默认的gcc 4.9.4编译器无法满足Qt5的最低要求需要gcc 5.0。1.1 获取Linaro交叉编译工具链Linaro提供的ARM交叉编译工具链是嵌入式开发的行业标准选择。以下是获取和配置步骤访问Linaro官网下载稳定版本wget https://releases.linaro.org/components/toolchain/binaries/6.4-2018.05/arm-linux-gnueabihf/gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz解压到工具链目录mkdir -p ~/toolchains tar -xvf gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz -C ~/toolchains配置环境变量添加到~/.bashrcexport PATH$PATH:~/toolchains/gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf/bin提示执行source ~/.bashrc使配置生效通过arm-linux-gnueabihf-gcc -v验证安装1.2 Buildroot外部工具链配置在Buildroot中配置外部工具链需要特别注意内核头文件版本匹配问题配置项推荐值说明Toolchain typeExternal toolchain使用自定义工具链ToolchainCustom toolchain指定Linaro工具链路径Toolchain path/path/to/gcc-linaro-6.4.1...工具链绝对路径External toolchain gcc version6.x匹配Linaro版本External toolchain kernel headers4.1.x需与实际内核头文件一致若遇到内核版本不匹配错误如提示expected 4.1.x, got 4.0.x需要修改工具链中的版本标识vim ~/toolchains/gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include/linux/version.h将LINUX_VERSION_CODE改为262415对应4.1.15内核。2. Buildroot中Qt5模块的定制化配置2.1 基础Qt5组件选择在Buildroot的menuconfig中需要精心选择Qt5模块组合以平衡功能与体积Target packages → Graphic libraries and applications → Qt5关键配置选项qt5base必选核心模块gui module启用GUI支持widgets module传统Widgets应用开发linuxfb support帧缓冲显示输出Enable Tslib support触摸屏支持harfbuzz support高级字体渲染Image formats根据需要选择JPEG/PNG/GIF2.2 字体与国际化支持嵌入式系统常因缺少字体导致Qt应用显示异常。推荐以下解决方案在Buildroot中配置字体支持Target packages → Fonts and font utilities → [*] wqy-zenhei (Chinese font) [*] dejavu (Western font)手动添加字体文件如果Buildroot未包含所需字体# 下载文泉驿字体 wget https://nchc.dl.sourceforge.net/project/wqy/wqy-zenhei/0.9.45%28Fighting-state%20RC1%29/wqy-zenhei-0.9.45.tar.gz # 解压到根文件系统 tar -xvf wqy-zenhei-0.9.45.tar.gz -C output/target/usr/share/fonts/2.3 编译与系统构建完成配置后执行编译make -j$(nproc)编译完成后系统镜像将生成在output/images/目录包含rootfs.tar- 根文件系统zImage- 内核镜像*.dtb- 设备树文件3. 触摸屏环境配置与校准3.1 tslib环境变量配置在output/target/etc/profile.d/下创建qt_env.sh配置Qt和tslib环境#!/bin/sh # tslib配置 export TSLIB_CONSOLEDEVICEnone export TSLIB_FBDEVICE/dev/fb0 export TSLIB_TSDEVICE$(ls /dev/input/event* | head -n 1) export TSLIB_CALIBFILE/etc/pointercal export TSLIB_CONFFILE/etc/ts.conf export TSLIB_PLUGINDIR/usr/lib/ts # Qt5配置 export QT_QPA_PLATFORMlinuxfb:fb/dev/fb0 export QT_QPA_GENERIC_PLUGINStslib:$TSLIB_TSDEVICE export QT_QPA_FONTDIR/usr/share/fonts export QT_PLUGIN_PATH/usr/lib/qt/plugins export QT_QPA_FB_TSLIB13.2 tslib配置文件优化修改output/target/etc/ts.conf启用必要的过滤插件module_raw input module pthres pmin1 module debounce drop_threshold200 module dejitter delta100 module linear常用插件功能说明插件参数作用pthrespmin1压力阈值过滤debouncedrop_threshold200防抖处理dejitterdelta100消除坐标抖动linear-坐标线性校准3.3 触摸屏校准实操烧录系统到开发板后执行校准流程ts_calibrate校准过程中依次点击屏幕显示的五个十字标记完成后校准数据将保存到/etc/pointercal。可通过ts_test验证触摸效果。4. Qt应用开发与部署实战4.1 开发主机环境搭建在开发主机上配置Qt Creator支持交叉编译添加qmake工具Tools → Options → Kits → Qt Versions → Add 路径output/host/bin/qmake配置交叉编译工具链C编译器arm-linux-gnueabihf-gcc C编译器arm-linux-gnueabihf-g创建Kit组合上述配置4.2 典型问题解决方案触摸无响应问题排查确认/dev/input/eventX设备节点存在检查环境变量TSLIB_TSDEVICE设置正确通过evtest工具验证原始触摸数据查看ts_test是否能正常响应字体显示异常处理确认QT_QPA_FONTDIR指向正确字体目录检查字体文件权限至少644在应用中指定回退字体QFont font(WenQuanYi Zen Hei); QApplication::setFont(font);性能优化技巧在QT_QPA_PLATFORM中添加:size800x480匹配屏幕分辨率启用OpenGL加速如果SoC支持export QT_QPA_PLATFORMlinuxfb:fb/dev/fb0:rotation0:glon禁用不需要的Qt模块减小体积4.3 应用打包与自动启动将编译好的Qt应用部署到开发板可执行文件放到/usr/bin创建启动脚本/etc/init.d/S99myapp#!/bin/sh export QT_QPA_PLATFORMlinuxfb:fb/dev/fb0 /usr/bin/myapp -qws 设置可执行权限chmod x /etc/init.d/S99myapp对于需要显示中文的应用确保在项目文件(.pro)中包含TRANSLATIONS myapp_zh_CN.ts QMAKE_EXTRA_COMPILERS lrelease在实际项目中我们发现触摸屏的响应延迟问题往往与tslib的debounce参数设置不当有关。通过反复测试将drop_threshold调整为150-300之间的值既能过滤误触又不影响正常操作。此外在低温环境下适当提高pmin值可以避免手套误触发。

相关文章:

在i.MX6ULL开发板上,用Buildroot配置Qt5+tslib触摸屏的完整环境搭建笔记

在i.MX6ULL开发板上构建Qt5tslib嵌入式GUI开发环境实战指南 当我们需要在资源受限的嵌入式设备上开发图形用户界面时,Qt框架凭借其跨平台特性和丰富的功能库成为首选。i.MX6ULL作为一款广泛应用于工业控制、智能家居等领域的ARM Cortex-A7处理器,搭配Bui…...

杰理之RX无法获取配对码问题【篇】

绑定功能中TX生成配对码...

Go语言的context.WithTimeout超时控制与取消信号在网络编程中的传播

Go语言在网络编程中因其高并发特性广受青睐,而context.WithTimeout提供的超时控制与取消信号传播机制,成为构建健壮分布式系统的关键工具。当服务需要调用外部API、数据库或微服务时,超时与取消逻辑能有效避免资源泄漏和级联故障。本文将深入…...

PLC工程师必备:用S7-1200的Slice寻址实现产线IO信号高效映射(附TIA Portal工程文件)

PLC工程师实战:S7-1200 Slice寻址在产线IO信号映射中的高阶应用 走进任何现代化生产车间,设备与控制系统之间的信号交互如同神经系统般密集而精确。作为自动化工程师,我们常常需要处理成百上千个数字量信号——从光电传感器的触发到电磁阀的开…...

鲁班猫4 rk3588 IIC驱动0.96寸OLED,打造实时系统监控屏并实现后台守护

1. 鲁班猫4与OLED屏幕的硬件连接 鲁班猫4开发板搭载的RK3588芯片拥有丰富的接口资源,其中I2C总线特别适合连接小型外设。我手头这块0.96寸OLED屏幕分辨率128x64,通过4针I2C接口与开发板通信。实际接线时要注意:3号引脚接SCL时钟线&#xff0c…...

Kairoa v1.1.18 版本:AI聊天功能协议支持升级,助力开发者高效开发

AI聊天功能协议支持再升级Kairoa作为一款专为开发者打造的跨平台桌面工具箱,其v1.1.18版本在AI聊天功能上进行了重要完善。此前,AI聊天模块仅支持OpenAI格式的接口,而此次更新新增了Anthropic Messages API和Google Gemini原生协议的支持。这…...

穿戴式设备:生理信号采集与健康状态分析

**穿戴式设备:生理信号采集与健康状态分析** 在科技飞速发展的今天,穿戴式设备已成为健康管理的重要工具。它们通过实时采集心率、血氧、体温等生理信号,结合智能算法分析用户的健康状态,为疾病预防和健康干预提供科学依据。无论…...

ISE仿真流程详解:从Verilog代码到Isim仿真的完整指南

1. ISE仿真流程概述 第一次接触FPGA开发的朋友们,常常会被复杂的工具链和仿真流程搞得晕头转向。今天我就以最常用的ISE设计套件为例,手把手带大家走完从Verilog代码编写到Isim仿真的完整流程。这个教程特别适合刚入门FPGA的开发者,我会尽量避…...

STM32 HAL库串口调试终极指南:5分钟搞定printf重定向(附常见问题排查)

STM32 HAL库串口调试终极指南:5分钟搞定printf重定向(附常见问题排查) 在嵌入式开发中,串口调试是最基础也最实用的调试手段之一。想象一下,当你面对一个复杂的嵌入式系统,能够通过简单的printf语句输出变量…...

Zynq UltraScale+ PL中断深度解析:从硬件连接到软件响应的完整链路

Zynq UltraScale PL中断深度解析:从硬件连接到软件响应的完整链路 在异构计算架构中,中断机制如同神经系统般连接着可编程逻辑(PL)与处理系统(PS)。当工程师需要实现微秒级实时响应或构建高可靠性系统时&am…...

Java 字符串常量池机制

Java字符串常量池:高效内存管理的秘密武器 在Java开发中,字符串是最常用的数据类型之一,但其频繁创建可能带来内存开销问题。为此,Java设计了字符串常量池(String Pool)机制,通过共享不可变字符…...

Arduino Uno开发板入门:从点亮第一个LED到串口通信(附完整代码)

Arduino Uno开发板入门:从点亮第一个LED到串口通信(附完整代码) 1. 初识Arduino Uno:硬件架构与开发环境搭建 当你第一次拿到这块蓝色的小板子时,可能会好奇它如何成为创客世界的明星。Arduino Uno采用Atmega328P微控…...

三菱A800变频器A8NC板卡与CC-Link网络配置实战指南

1. A8NC板卡基础认知与安装要点 第一次接触三菱A800变频器的A8NC板卡时,很多人会被这个火柴盒大小的模块难住。其实它的本质就是让变频器具备CC-Link通信能力的"翻译官"。我经手过的自动化产线项目里,90%的通信故障都源于初期安装不规范。这里…...

《数字孪生90%都是假的,只有空间智能体才是真的》——从“可视化幻觉”到“空间计算现实”的范式重构

摘要过去五年,“数字孪生”几乎成为智慧城市、园区、港口、工业、水利、矿山等领域的标准配置: 三维模型 大屏可视化 数据接入 数字孪生。但问题在于:绝大多数系统,只是“看起来像真的”,并不“真的在运行现实”。镜…...

告别虚拟机卡顿:用WSL2+Docker在Windows上丝滑编译OpenHarmony 4.0源码

告别虚拟机卡顿:用WSL2Docker在Windows上丝滑编译OpenHarmony 4.0源码 对于Windows平台的开发者而言,编译OpenHarmony源码一直是个令人头疼的问题。传统虚拟机方案不仅占用大量系统资源,还会导致编译速度缓慢,严重影响开发效率。…...

SCD4X CO₂传感器Arduino驱动详解:光声传感与低功耗IAQ应用

1. 项目概述DFRobot_SCD4X 是专为 Sensirion SCD40/SCD41 数字式金属氧化物多气体传感器(SKU: SEN0536)设计的嵌入式驱动库。该传感器采用光声传感(Photoacoustic Sensing, PAS)原理,融合 Sensirion 自主研发的 PAsens…...

软件构建管理中的依赖管理优化

软件构建管理中的依赖管理优化 在现代软件开发中,依赖管理是软件构建过程中的核心环节之一。随着项目规模的扩大和第三方库的广泛使用,依赖关系的复杂性急剧增加,如何高效管理这些依赖成为开发团队必须面对的挑战。优化依赖管理不仅能提升构…...

大模型全景图-GPT到多模态演进路线

大模型全景图:从 GPT 到多模态,我是怎么被一路"卷"过来的一张图理清大模型演进路线,不再被各种名词绕晕从一个场景说起 前段时间有个朋友问我:“现在大模型这么多,GPT、Claude、Gemini、文心、通义&#xff…...

终极英雄联盟工具箱:如何用智能助手轻松提升游戏段位

终极英雄联盟工具箱:如何用智能助手轻松提升游戏段位 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari 是一款专为英雄…...

SpringCloud进阶--Seata与分布式事务歉

起因是我想在搞一些操作windows进程的事情时,老是需要右键以管理员身份运行,感觉很麻烦。就研究了一下怎么提权,顺手瞄了一眼Windows下用户态权限分配,然后也是感谢《深入解析Windows操作系统》这本书给我偷令牌的灵感吧&#xff…...

【AI Token中转】2026年AI Token代理站搭建实战:技术架构与运营策略

2026年AI Token中转站搭建实战:技术架构与运营策略 上个月帮朋友搭了一个API中转站。折腾了一周,踩了几个坑,现在稳定跑了两个月。 这篇文章把整个过程和实际数据整理出来。包括技术选型、部署细节、运维经验,还有运营策略。 不讲…...

再次革新 .NET 的构建和发布方式(一)蛊

本文能帮你解决什么? 1. 搞懂FastAPI异步(async/await)到底在什么场景下能真正提升性能。 2. 掌握在FastAPI中正确使用多线程处理CPU密集型任务的方法。 3. 避开常见的坑(比如阻塞操作、数据库连接池耗尽、GIL限制)。 …...

从Windows换到麒麟V10 SP1,这7个自带神器让我彻底卸载了第三方管家软件

从Windows换到麒麟V10 SP1,这7个自带神器让我彻底卸载了第三方管家软件 第一次打开银河麒麟桌面操作系统V10 SP1时,那种既熟悉又陌生的感觉让我想起了十年前从Windows XP升级到Windows 7的体验。作为一个长期使用Windows系统的普通办公用户,我…...

Coding Agent底层架构全解(极其详细),吃透6大核心组件,收藏这篇就够了!

为什么同样的模型,在 Chat 界面和 Coding Agent 里表现完全不同? 最近读到 Sebastian Raschka 的一篇深度文章,拆解了 Coding Agent(代码智能体)的核心架构。Sebastian 是《Build a Large Language Model (From Scratc…...

35岁程序员必看:收藏这份智能体(Agent)开发指南,开启你的“第二曲线”!

35岁,已经成为职场人的魔咒。 尤其是IT行业打工人。 很多人到了35岁,被裁了。 没被裁的,也在担心被裁。 还没到35岁的,已经开始焦虑—— “到了那时候,我该怎么办?” 以前,还真没什么好办法。 但…...

从安全工具开发视角看驱动遍历:如何用C语言在Windows内核里‘看见’所有sys文件

从安全工具开发视角看驱动遍历:如何用C语言在Windows内核里‘看见’所有sys文件 在安全攻防的战场上,内核层始终是兵家必争之地。当恶意软件试图通过加载隐藏驱动来逃避检测时,安全工程师需要一双能穿透迷雾的"眼睛"——这就是驱动…...

从MCAS系统失效到监管失察:波音737MAX空难的工程伦理再审视

1. MCAS系统:一个被简化的技术补丁 当波音工程师面对737MAX机型发动机安装位置带来的气动特性变化时,他们选择了一个看似聪明的解决方案——机动特性增强系统(MCAS)。这个系统的设计初衷非常简单:当飞机仰角过大时&…...

不用装软件!这款MicroPython浏览器 IDE :让你在手机上也能调试树莓派 Pico拐

1、普通的insert into 如果(主键/唯一建)存在,则会报错 新需求:就算冲突也不报错,用其他处理逻辑 回到顶部 2、基本语法(INSERT INTO ... ON CONFLICT (...) DO (UPDATE SET ...)/(NOTHING)) 语…...

ESP32/ESP8266接入Ambient云平台实战指南

1. Ambient ESP32/ESP8266 库技术解析:面向嵌入式物联网的数据上云实践Ambient 是一款专为物联网设备设计的轻量级云端数据可视化服务,其核心价值在于将嵌入式终端采集的传感器数据,通过极简协议上传至云端,并自动生成实时、可配置…...

STM32裸机4-bit驱动HD44780字符LCD库

1. 项目概述CharLcd4bit是一款专为 STM32F103RB 微控制器(如 NUCLEO-F103RB 开发板)设计的轻量级字符型液晶显示驱动库,面向标准 HD44780 兼容的 162 字符 LCD 模块(典型型号:JHD162A、LM016L、PC1602 等)&…...