四、linux系统 应用开发:UI开发环境配置概述 (一)

2.2、配置项简述
2.2.1、"图形底座"最小配置

这部分是所有 UI 环境共享的,不区分 Qt/LVGL/SDL/Web/Python/Electron

1、Kernel
  • DRM/KMSCONFIG_DRM, CONFIG_DRM_ROCKCHIP(RK3566 VOP)
  • 输入:CONFIG_INPUT_EVDEV(触摸/键鼠)
  • (可选)fbdev:CONFIG_FB(只给兜底/兼容用)
  • 设备树:panel/bridge/connector 时序正确(否则用户态再完整也黑屏)
2、Buildroot:设备节点与运行时基础
  • /dev 管理:eudev
  • 权限/用户:至少保证运行 UI 的用户能访问 /dev/dri/card0/dev/input/event*
    • 简化做法:产品机初期先用 root 跑通,再做降权
  • 调试工具(强烈建议)
    • libdrm + libdrm-tests(modetest)
    • evtest
    • glmark2-es2(验证 EGL/GLES)
3、图形库(GPU/EGL)
  • 需要 GPU/EGL 的(Qt QuickWeston EGLChromium/Electron、部分 SDL2 加速):
    • EGL + GLES2(Rockchip MaliMesa)
    • libdrm
  • 不一定需要 GPU 的(LVGL dumb bufferSDL2 软件渲染):
    • 也建议保留 libdrm,因为要 KMS 模式设置/分配 buffer
4、字体
  • fontconfig + 至少一套字体(DejaVu/Noto 等)
  • freetype(很多栈会自动依赖)

到这里,已经具备"能点亮屏、能收触摸、能跑 EGL demo"的硬底座。

2.2.2、Qt
1、Qt + Weston/Wayland

Buildroot 最小项:

  • Qt
    • qt5base
    • qt5wayland(必须)
    • 如果用 QMLqt5declarative(常见你已经开了 quickcontrols2)
  • Wayland/Weston
    • wayland
    • wayland-protocols
    • weston(启用 drm-backend)
    • libinput(Weston 通常会带/依赖)
  • 图形:
    • EGL/GLES(Mali Mesa)
    • libdrm

最小验证(环境支持开发的定义):

  • modetest -M rockchip
  • weston --backend=drm-backend.so 能起
  • weston-simple-egl
  • QT_QPA_PLATFORM=wayland your_app
2、Qt EGLFS

DRM/KMS 直出,无 Weston

Buildroot 最小项:

  • qt5base(关键:必须编出 eglfs 平台插件)
  • EGL/GLES(Mali Mesa)
  • libdrm
  • 字体(fontconfig + 字体包)

最小验证:

  • modetest -M rockchip
  • glmark2-es2
  • QT_QPA_PLATFORM=eglfs your_app
2.2.3、LVGL

LVGL 不依赖 Qt/Wayland/X11(DRM 直出),本质是:写一个用户态程序,使用 libdrm(KMS) + input(evdev/libinput) 做显示与交互。

Buildroot 最小项:

  • libdrm(最好带 tests 用于排错)
  • 输入侧:
    • 最简:直接读 /dev/input/event*(只要内核有 EVDEV)
    • 或用 libinput(更统一,但不是必须)
  • C 库/线程:
    • pthread(默认有)
  • 字体:
    • LVGL 自带字体也能跑,但做中文一般要加字体资源(文件或编译进)
  • LVGL 本体:
    • 通常通过 自定义 Buildroot package(vendor lvgl 源码 + 自己的 app)

最小验证:

  • modetest 能看见 connector/mode
  • evtest 触摸有事件
  • 运行 lvgl demo 能刷屏且触摸响应
2.2.4、SDL2

Buildroot 最小项:

  • sdl2
  • SDL2 后端选择(KMSDRM):
    • 需要 SDL2 编译时启用 kmsdrm/video driver(不同 Buildroot 分支选项名可能不同)
  • libdrm
  • (可选)EGL/GLES:如果要 SDL2 accelerated rendererGPU
  • 字体不是硬必须(自己画),但 UI 里要文本就得加字体和渲染库(SDL_ttf 等)

最小验证:

bash 复制代码
export SDL_VIDEODRIVER=kmsdrm
./sdl_demo
2.2.3、Chromium kiosk(Web UI)

Chromium 方案的"基础环境"比 Qt/LVGL/SDL 重很多,最小要满足:

图形后端 + 浏览器运行时 + 字体 + 证书/网络 +(常见)音视频。

1、Chromium + Wayland/Weston

Buildroot 最小项:

  • Wayland/Weston 栈(同 Qt Wayland):
    • wayland, wayland-protocols, weston, libinput
  • Chromium 运行时:
    • 这在 Buildroot 上通常非常重(有的团队用外部构建/预编译交付),但"基础项"就是:系统里得有 chromium 可执行文件及其依赖库
  • 图形:EGL/GLES + libdrm
  • 字体:fontconfig + 字体包(必须,否则网页字体 /emoji 极其怪)
  • 证书:ca-certificates
  • (常见)音频:ALSA / PulseAudio(看网页是否需要音频)
  • (常见)多媒体栈:ffmpeg/gstreamer(Chromium 自身也带媒体能力,但嵌入式硬解路径看版本和集成)

最小验证:

  • 先验证 Weston
  • chromium --kiosk file:///.../index.html
2、更嵌入式的替代:WPE WebKit + Cog

如果"Web UI 强需求"但又不想 Chromium 那么重,WPE/Cog 是常见路线。

基础项与"Wayland/Weston + Web runtime"类似,只是浏览器内核换成 WPE/Cog,体积/依赖通常更可控。

2.2.4、Python(PySide)

PySide = Qt 绑定 + Python 运行时,所以它的基础项 = Qt(Wayland/EGLFS)+ Python 包体系。

Buildroot 最小项:

  • python3
  • Qt(建议先走 Wayland/Weston 更省坑):
    • qt5base + qt5wayland + weston(或 EGLFS 直出)
  • PySide 本体(PySide2/PySide6 取决于 Qt5/Qt6):
    • 在很多 Buildroot 树里未必现成可用,常见做法是:
      • 自己用 Buildrootpython-package 机制打包 PyPI(这会带来一串依赖)
  • 字体(Qt 需要)
  • (可选)numpy/scipy/opencv 等算法库("算法+UI"需求)

最小验证:

  1. Qt 环境按第 1 节跑通
  2. 再执行最小 PySide 窗口脚本(import+ show)
2.2.5、Electron

Electron = Chromium + Node + 自带运行时,基础环境比 Chromium 更重,而且通常不建议在 Buildroot 内"从源码编 electron"。

Buildroot 最小项(推荐的工程现实做法):

  • Wayland/WestonX11(多数 Electron 生态更偏 X11/Wayland
  • Electron 可执行文件及其依赖库(通常走外部构建/预编译交付,然后 Buildroot 负责安装到 rootfs)
  • 字体(必须)
  • 证书/网络(ca-certificates)
  • (常见)dbus、音频(取决于应用)

最小验证:

  • Weston
  • electron --version
  • 启动最小 electron app
相关推荐
LUCIFER4 小时前
[驱动进阶——MIPI摄像头驱动(五)]rk3588+OV13855摄像头驱动加载过程详细解析第四部分——ISP驱动
linux·驱动开发
a程序小傲5 小时前
得物Java面试被问:RocketMQ的消息轨迹追踪实现
java·linux·spring·面试·职场和发展·rocketmq·java-rocketmq
Ghost Face...5 小时前
i386 CPU页式存储管理深度解析
java·linux·服务器
LEEE@FPGA5 小时前
zynq 是不是有了设备树,再linux中不需要编写驱动也能控制
linux·运维·单片机
CQ_YM5 小时前
ARM之I2C与ADC
arm开发·嵌入式硬件·嵌入式·arm
雨季6665 小时前
构建 OpenHarmony 随机颜色生成器:用纯数学生成视觉灵感
开发语言·javascript·flutter·ui·ecmascript·dart
RisunJan5 小时前
Linux命令-less(分页查看器)
linux·运维
梁正雄5 小时前
linux服务-MariaDB 10.6 Galera Cluster+garbd
linux·运维·mariadb
Coder个人博客6 小时前
Linux6.19-ARM64 mm mem_encrypt子模块深入分析
linux·安全·车载系统·系统架构·系统安全·鸿蒙系统·安全架构