2.4、LVGL详细配置说明
1、配置说明
按照"从底到顶"的链路来罗列:必选底座 →
LVGL本体与端口 → 输入 → 字体/资源 → 调试工具 →(可选)权限seat重要前提:
LVGL在Linux上"直出DRM"并不是只勾一个LVGL包就完事,它一定还需要:
libdrm(KMS模式设置+buffer)+LVGL display/input glue(应用/port)。Buildroot里是否自带 "LVGL DRM端口/驱动包" 取决于Buildroot分支;所以会同时给出 "有官方包时怎么配" 和 "没有时如何自建包(仍然是关键词)" 两条路径。
1、LVGL(DRM) 最小可跑链路
/dev/dri/card0存在(内核DRM+udev创建设备节点)libdrm在用户态可用(最好带modetest排错)LVGL程序包含DRM显示驱动(自己写或用lv_drivers/port)- 输入:至少能读
/dev/input/event*(触摸/键鼠) - 字体/资源按需(最小
demo可不依赖fontconfig,但做中文基本要字体文件/字库)
2、配置关键字清单
-
设备节点管理(没有
/dev就别谈DRM)BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV
作用:动态生成/dev/dri/*、/dev/input/*。
缺失表现:系统里没有/dev/dri/card0或/dev/input/event*,LVGL DRM端口无法打开设备。
-
DRM/KMS用户态库(LVGL DRM端口必须)BR2_PACKAGE_LIBDRM
作用:提供DRM/KMS API(drmModeGetResources、drmModeSetCrtc、dumb buffer/GBM等)。
缺失表现:LVGL DRM程序要么编不过,要么运行时报缺库 无法打开DRM。BR2_PACKAGE_LIBDRM_INSTALL_TESTS(强烈建议开发阶段启用)
作用:安装modetest,可快速确认connector/mode/plane,排查黑屏。
缺失表现:很难判断是"DRM没起来"还是"LVGL端口参数/代码不对"。
-
LVGL本体(库本身)-
Buildroot树自带LVGL包常见关键字(不同版本可能略有差异,但通常叫这个):
BR2_PACKAGE_LVGL
作用:安装LVGL核心库(lvgl)。
缺失表现:当然没法编LVGL应用。
常见配套:
BR2_PACKAGE_LVGL_DEMOS/BR2_PACKAGE_LVGL_EXAMPLES(名字依版本)
作用:带demo,用来快速验证渲染循环、字体、图片等。
注意:即便有
BR2_PACKAGE_LVGL=y,它也未必包含"DRM显示驱动"。很多时候还要额外的port/driver。 -
Buildroot树没有现成LVGL包或没有DRM端口必须做一个 自建
Buildroot package(例如lvgl-app),把这些源码vendoring进去:lvgl(库)lv_drivers或你的drm driver(显示/输入glue)main/app
这种情况下,
Buildroot里不会出现BR2_PACKAGE_LVGL,但仍然需要上面的基础包(eudev+libdrm),并且会新增一个自己的:BR2_PACKAGE_LVGL_APP(自己定义的包名)
-
-
输入(触摸/鼠标/键盘)
LVGL输入有两种常见做法:直接读evdev或 走libinput。-
最简通用:直接读
/dev/input/event*(推荐先跑通)这条路线通常不强制要求
Buildroot勾libinput,可以自己open/read event。- (工具)
BR2_PACKAGE_EVTEST(建议)
作用:验证event节点是否有触摸数据、坐标范围。
缺失表现:你分不清是驱动问题还是LVGL输入映射问题。
- (工具)
-
更统一更"桌面化":
libinput(可选)BR2_PACKAGE_LIBINPUT
作用:统一处理触摸/鼠标/多指/去抖动等。
缺失表现:不是必然跑不起来,但复杂输入设备支持会差一些。
-
触摸校准(强烈建议"产品化"时考虑)
BR2_PACKAGE_TSLIB(可选)
作用:电阻屏/部分触控需要校准矩阵;tslib提供ts_calibrate等工具。
缺失表现:触摸坐标偏移、线性误差难以解决(尤其非标准屏或旋转屏)。
RK3566触控很多是I2C电容屏,未必需要tslib,但"可选项"建议知道。
-
-
字体/图片等资源(按
UI复杂度选择)LVGL最小demo可以用内置字库(不依赖fontconfig),一旦要中文、要TTF、要图标图片,通常会用到这些包:-
字体(两条路)
-
路线
A:LVGL内置位图字体(最小、最稳):不一定需要额外
BR2包(字体编译进固件应用里) -
路线
B:使用TTF/OTF(常见:做中文/多字号)BR2_PACKAGE_FREETYPE
作用:TTF/矢量字体栅格化(LVGL可用freetype作为font engine)。- (可选)
BR2_PACKAGE_FONTCONFIG
作用:字体查找与fallback(更偏"桌面"习惯;LVGL不一定强依赖)。
注意:
LVGL用freetype时,LVGL配置(lv_conf.h)里也要打开相应宏,这不属于 BR2_ 关键字,但属于"方案必做项"。
-
-
图片/资源解码
PNG:BR2_PACKAGE_LIBPNGJPEG:BR2_PACKAGE_JPEG或BR2_PACKAGE_LIBJPEG_TURBO(常见更快)GIF:BR2_PACKAGE_GIFLIBzlib(通常libpng会依赖):BR2_PACKAGE_ZLIB
同样:
LVGL侧也要在lv_conf.h打开对应的image decoder支持。
-
-
调试/验证工具(强烈建议开发镜像带上)
这些不影响"最终量产最小集",但是对于把
LVGL(DRM) 跑通非常关键:BR2_PACKAGE_LIBDRM_INSTALL_TESTS(上面提过,必须推荐)BR2_PACKAGE_EVTEST(上面提过)- (可选)
BR2_PACKAGE_STRACE:追open("/dev/dri/card0")失败原因 - (可选)
BR2_PACKAGE_GDB:调试DRM初始化/输入线程 - (可选)
BR2_PACKAGE_PERF:卡顿/掉帧分析
-
权限
/seat("是否必需"取决于怎么运行LVGL)LVGL DRM直出一般最简单是root运行,可以完全不管seat。但如果希望非
root运行、更正规地管权限,可能需要:BR2_PACKAGE_SEATDBR2_PACKAGE_LIBSEAT
作用:让非
root程序也能稳定访问DRM输入设备(类似systemd/logind的作用)。缺失表现:非
root时打开/dev/dri/card0、/dev/input/event*失败(权限不足)。这块是少数与系统形态有关的点,但"基础包选择"本身依旧是 BR2_ 关键字。
2、完整关键词清单
可以把下面这份当成
LVGL方案的完整配置关键词列表:
- 核心必备
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEVBR2_PACKAGE_LIBDRMBR2_PACKAGE_LVGL(若你的Buildroot树提供)- 如果没有该包:需要自建
BR2_PACKAGE_LVGL_APP(自定义)
- 如果没有该包:需要自建
- (强烈建议)
BR2_PACKAGE_LIBDRM_INSTALL_TESTS
- 输入(推荐)
BR2_PACKAGE_EVTESTBR2_PACKAGE_LIBINPUT(可选)BR2_PACKAGE_TSLIB(可选,触摸需校准时)
- 字体/资源(按需)
BR2_PACKAGE_FREETYPE(用TTF时建议)BR2_PACKAGE_FONTCONFIG(可选)BR2_PACKAGE_LIBPNG/BR2_PACKAGE_JPEG(或BR2_PACKAGE_LIBJPEG_TURBO) /BR2_PACKAGE_GIFLIB(用到对应图片格式就选)
- 权限
/seat(非root推荐)BR2_PACKAGE_SEATDBR2_PACKAGE_LIBSEAT
3、排查方式
-
一次性
grep看当前defconfig/.config是否包含这些符号bashgrep -nE 'BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV|BR2_PACKAGE_LIBDRM|BR2_PACKAGE_LIBDRM_INSTALL_TESTS|BR2_PACKAGE_LVGL|BR2_PACKAGE_EVTEST|BR2_PACKAGE_LIBINPUT|BR2_PACKAGE_TSLIB|BR2_PACKAGE_FREETYPE|BR2_PACKAGE_FONTCONFIG|BR2_PACKAGE_LIBPNG|BR2_PACKAGE_JPEG|BR2_PACKAGE_LIBJPEG_TURBO|BR2_PACKAGE_GIFLIB|BR2_PACKAGE_SEATD|BR2_PACKAGE_LIBSEAT' .config -
menuconfig内搜索make menuconfig→ 按/输入:BR2_PACKAGE_LVGLBR2_PACKAGE_LIBDRMBR2_PACKAGE_LIBDRM_INSTALL_TESTSBR2_PACKAGE_LIBINPUTBR2_PACKAGE_TSLIBBR2_PACKAGE_FREETYPEBR2_PACKAGE_LIBPNGseatd/libseat
-
"方案是否配置成功" 的判定标准
modetest -Mrockchip(DRM输出存在、connected、有mode)evtest /dev/input/eventX(触摸事件正常)- 运行
LVGL DRM demo(能刷屏、触摸有响应) - 如果用
freetype/图片:中文显示 、PNG/JPEG显示