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

张开发
2026/4/12 3:05:49 15 分钟阅读

分享文章

在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值可以避免手套误触发。

更多文章