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

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

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

1、Kernel
  • DRM/KMS:CONFIG_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 Quick、Weston EGL、Chromium/Electron、部分 SDL2 加速):
    • EGL + GLES2(Rockchip Mali 或 Mesa)
    • libdrm
  • 不一定需要 GPU 的(LVGL dumb buffer、SDL2 软件渲染):
    • 也建议保留 libdrm,因为要 KMS 模式设置/分配 buffer
4、字体
  • fontconfig + 至少一套字体(DejaVu/Noto 等)
  • freetype(很多栈会自动依赖)

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

2.2.2、Qt
1、Qt + Weston/Wayland

Buildroot 最小项:

  • Qt:
    • qt5base
    • qt5wayland(必须)
    • 如果用 QML:qt5declarative(常见你已经开了 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 renderer 走 GPU
  • 字体不是硬必须(自己画),但 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 树里未必现成可用,常见做法是:
      • 自己用 Buildroot 的 python-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/Weston 或 X11(多数 Electron 生态更偏 X11/Wayland
  • Electron 可执行文件及其依赖库(通常走外部构建/预编译交付,然后 Buildroot 负责安装到 rootfs)
  • 字体(必须)
  • 证书/网络(ca-certificates)
  • (常见)dbus、音频(取决于应用)

最小验证:

  • Weston 起
  • electron --version
  • 启动最小 electron app
相关推荐
陈希12330 分钟前
Linux 防火墙配置实战:firewalld、iptables 与云安全组
linux·运维·服务器
女神下凡1 小时前
芯参谋(95):嵌入式文件系统_开发指南
linux·服务器·arm开发·驱动开发·设计规范
且从容.5 小时前
Ubuntu安装flume
linux·ubuntu·flume
承渊政道5 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
行者-全栈开发7 小时前
【鸿蒙心迹】国际化 i18n 与多语言资源管理实战(HarmonyOS 7.x)
ui·华为·重构·国际化·harmonyos·多语言
且从容.8 小时前
ubuntu安装flink
linux·ubuntu·flink
爱和冰阔落9 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨9 小时前
WSL2的安装与使用
linux·wsl
微小的鱼10 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng10 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器