小白也能懂-显示屏:应用层开发


版权声明:本站所有文字均来源于微信公众号或其他新闻媒体平台,如有侵权,请评论告知。

Copyright: All text from internet. For infringement, please comment to inform us.

大家好,我是快乐学习,开心分享的科技探索员🎉

走过前三期,我们已经打通了LCD 从物理原理、接口协议到Linux 驱动的完整链路。这一期是系列收官篇,进入应用层——图像数据怎么送到 LCD 上?Qt 界面如何在嵌入式 Linux 上跑起来?OpenGL ES 怎么利用 GPU 渲染?摄像头实时预览怎么做?

▍ 一、Linux 显示架构全景:三条渲染路径

▲ 嵌入式 Linux 三条显示渲染路径——直写fb0 / Qt+EGLFS / OpenGL ES+EGL

路径:直接写 /dev/fb0(最简单)

应用程序 mmap /dev/fb0 直接写 RGB 像素数据。无需 GPUCPU 直接写内存。适合简单状态显示、调试、低功耗 MPU。缺点:无硬件加速,全屏刷新 CPU 占用高,无双缓冲防撕裂。

路径Qt + LinuxFB / EGLFS 插件

Qt  QPA 平台抽象层屏蔽底层差异。LinuxFB:纯软件渲染,写 fb0,无 GPU 依赖。EGLFSGPU 渲染,通过 EGL 直接操作 DRM/KMS,性能最佳。适合绝大多数嵌入式 HMI 开发。

路径OpenGL ES + EGL + DRM(性能最优)

利用 GPU 硬件加速渲染,CPU 解放。适合需要 2D/3D 动效、视频流、地图渲染的高性能场景。

▍ 二、直接操作 Framebuffer语言画像素

⚠️ 双缓冲防撕裂:直接写 fb0 会导致画面撕裂。用 fb_var_screeninfo.yoffset配合 FBIOPAN_DISPLAY ioctl 实现页翻转——用一块 2 倍高度的显存,交替写前半和后半,刷新完整后切换显示偏移。

▍ 三、Qt 嵌入式部署:从编译到上屏

▲ Qt 嵌入式 Linux 部署架构——应用层到 QPA 平台插件到系统层

💡 EGLFS 调试:Could not find DRM backend → 检查 /dev/dri/card0 是否存在;EGLFS: OpenGL ES 2.0 not available → GPU 驱动未正确加载;屏幕空白 → 设置 QT_LOGGING_RULES='qt.qpa.eglfs*=true' 查看日志。

▍ 四、V4L2 摄像头流实时显示在 LCD

▲ V4L2 摄像头到 LCD 实时显示数据流——标准路径 / NEON加速 / DMA-BUF零拷贝

💡 零拷贝方案:使用 DMA-BUF 在摄像头驱动和 GPU 之间直接共享内存,避免两次拷贝。这是车载 ADAS 和手机相机预览管线的标准做法。

▍ 五、HMI 性能优化:让界面更流畅的 5 个技巧

▲ 嵌入式 HMI 显示性能优化 5 大技巧

• ① 脏区刷新(Partial Update):只刷新变化的矩形区域,节省5080% 带宽

• ② 双缓冲 / 三缓冲:VSync 时刻交换缓冲,消除画面撕裂

• ③ 减少 RGB 格式转换:摄像头/GPU/LCD 统一色彩格式,消除转换开销

• ④ Qt 渲染优化:EGLFS 而非 LinuxFB,开启 QSG_RENDER_TIMING 分析瓶颈

• ⑤ 背光亮度自适应(CABC):根据内容动态调节背光,可降低 1030% 功耗

▍ 六、LCD 显示屏系列总结:四期知识体系回顾

• ①显示技术全景:TN/IPS/VA液晶原理,CCFL/LED/Mini-LED背光进化,LCD vs OLED 选型指南

• ②驱动芯片与接口协议:SPI/RGB/MIPI DSI/LVDS 四大接口,主流驱动IC,时序参数计算,初始化序列解析

• ③Linux LCD驱动开发:Framebuffer vs DRM drm_panel 双框架,SPI LCD 完整驱动,MIPI DSI 调试,背光 PWM

• ④应用层开发实战:直写fb0Qt+EGLFSOpenGL ES+EGL GPU 渲染,V4L2摄像头实时显示,HMI性能优化

暂无评论,快来发表第一条评论吧!

📋 需求咨询