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)evtestglmark2-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:qt5baseqt5wayland(必须)- 如果用
QML:qt5declarative(常见你已经开了quickcontrols2)
Wayland/Weston:waylandwayland-protocolsweston(启用drm-backend)libinput(Weston通常会带/依赖)
- 图形:
EGL/GLES(Mali或Mesa)libdrm
最小验证(环境支持开发的定义):
modetest -M rockchipweston --backend=drm-backend.so能起weston-simple-eglQT_QPA_PLATFORM=wayland your_app
2、Qt EGLFS
DRM/KMS直出,无Weston
Buildroot 最小项:
qt5base(关键:必须编出eglfs平台插件)EGL/GLES(Mali或Mesa)libdrm- 字体(
fontconfig+ 字体包)
最小验证:
modetest -M rockchipglmark2-es2QT_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/modeevtest触摸有事件- 运行
lvgl demo能刷屏且触摸响应
2.2.4、SDL2
Buildroot 最小项:
sdl2SDL2后端选择(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 最小项:
python3Qt(建议先走Wayland/Weston更省坑):qt5base+qt5wayland+weston(或EGLFS直出)
PySide本体(PySide2/PySide6取决于Qt5/Qt6):- 在很多
Buildroot树里未必现成可用,常见做法是:- 自己用
Buildroot的python-package机制打包PyPI(这会带来一串依赖)
- 自己用
- 在很多
- 字体(
Qt需要) - (可选)
numpy/scipy/opencv等算法库("算法+UI"需求)
最小验证:
- 先
Qt环境按第 1 节跑通 - 再执行最小
PySide窗口脚本(import+show)
2.2.5、Electron
Electron=Chromium+Node+ 自带运行时,基础环境比Chromium更重,而且通常不建议在Buildroot内"从源码编electron"。
Buildroot 最小项(推荐的工程现实做法):
Wayland/Weston或X11(多数Electron生态更偏X11/WaylandElectron可执行文件及其依赖库(通常走外部构建/预编译交付,然后Buildroot负责安装到rootfs)- 字体(必须)
- 证书/网络(
ca-certificates) - (常见)
dbus、音频(取决于应用)
最小验证:
Weston起electron --version- 启动最小
electron app