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

2.4、LVGL详细配置说明
1、配置说明

按照"从底到顶"的链路来罗列:必选底座 → LVGL 本体与端口 → 输入 → 字体/资源 → 调试工具 →(可选)权限seat

重要前提:LVGLLinux 上"直出 DRM"并不是只勾一个 LVGL 包就完事,它一定还需要:

  • libdrmKMS 模式设置+buffer)+ LVGL display/input glue(应用/port)。
  • Buildroot 里是否自带 "LVGL DRM 端口/驱动包" 取决于 Buildroot 分支;所以会同时给出 "有官方包时怎么配" 和 "没有时如何自建包(仍然是关键词)" 两条路径。
1、LVGL(DRM) 最小可跑链路
  1. /dev/dri/card0 存在(内核 DRM + udev 创建设备节点)
  2. libdrm 在用户态可用(最好带 modetest 排错)
  3. LVGL 程序包含 DRM 显示驱动(自己写或用 lv_drivers/port
  4. 输入:至少能读 /dev/input/event*(触摸/键鼠)
  5. 字体/资源按需(最小 demo 可不依赖 fontconfig,但做中文基本要字体文件/字库)
2、配置关键字清单
  1. 设备节点管理(没有 /dev 就别谈 DRM

    • BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV
      作用:动态生成 /dev/dri/*/dev/input/*
      缺失表现:系统里没有 /dev/dri/card0/dev/input/event*LVGL DRM 端口无法打开设备。
  2. DRM/KMS 用户态库(LVGL DRM 端口必须)

    • BR2_PACKAGE_LIBDRM
      作用:提供 DRM/KMS APIdrmModeGetResourcesdrmModeSetCrtcdumb buffer/GBM 等)。
      缺失表现:LVGL DRM 程序要么编不过,要么运行时报缺库 无法打开 DRM
    • BR2_PACKAGE_LIBDRM_INSTALL_TESTS(强烈建议开发阶段启用)
      作用:安装 modetest,可快速确认 connector/mode/plane,排查黑屏。
      缺失表现:很难判断是"DRM 没起来"还是"LVGL 端口参数/代码不对"。
  3. LVGL 本体(库本身)

    1. Buildroot 树自带 LVGL

      常见关键字(不同版本可能略有差异,但通常叫这个):

      • BR2_PACKAGE_LVGL
        作用:安装 LVGL 核心库(lvgl)。
        缺失表现:当然没法编 LVGL 应用。

      常见配套:

      • BR2_PACKAGE_LVGL_DEMOS / BR2_PACKAGE_LVGL_EXAMPLES(名字依版本)
        作用:带 demo,用来快速验证渲染循环、字体、图片等。

      注意:即便有 BR2_PACKAGE_LVGL=y,它也未必包含"DRM 显示驱动"。很多时候还要额外的 port/driver

    2. 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(自己定义的包名)
  4. 输入(触摸/鼠标/键盘)

    LVGL 输入有两种常见做法:直接读 evdev 或 走 libinput

    1. 最简通用:直接读 /dev/input/event*(推荐先跑通)

      这条路线通常不强制要求 Buildrootlibinput,可以自己 open/read event

      • (工具)BR2_PACKAGE_EVTEST(建议)
        作用:验证 event 节点是否有触摸数据、坐标范围。
        缺失表现:你分不清是驱动问题还是 LVGL 输入映射问题。
    2. 更统一更"桌面化":libinput(可选)

      • BR2_PACKAGE_LIBINPUT
        作用:统一处理触摸/鼠标/多指/去抖动等。
        缺失表现:不是必然跑不起来,但复杂输入设备支持会差一些。
    3. 触摸校准(强烈建议"产品化"时考虑)

      • BR2_PACKAGE_TSLIB(可选)
        作用:电阻屏/部分触控需要校准矩阵;tslib 提供 ts_calibrate 等工具。
        缺失表现:触摸坐标偏移、线性误差难以解决(尤其非标准屏或旋转屏)。

      RK3566 触控很多是 I2C 电容屏,未必需要 tslib,但"可选项"建议知道。

  5. 字体/图片等资源(按 UI 复杂度选择)

    LVGL 最小 demo 可以用内置字库(不依赖 fontconfig),一旦要中文、要 TTF、要图标图片,通常会用到这些包:

    1. 字体(两条路)

      • 路线 ALVGL 内置位图字体(最小、最稳):

        不一定需要额外 BR2 包(字体编译进固件应用里)

      • 路线 B:使用 TTF/OTF(常见:做中文/多字号)

        • BR2_PACKAGE_FREETYPE
          作用:TTF/矢量字体栅格化(LVGL 可用 freetype 作为 font engine)。
        • (可选)BR2_PACKAGE_FONTCONFIG
          作用:字体查找与 fallback(更偏"桌面"习惯;LVGL 不一定强依赖)。

        注意:LVGLfreetype 时,LVGL 配置(lv_conf.h)里也要打开相应宏,这不属于 BR2_ 关键字,但属于"方案必做项"。

    2. 图片/资源解码

      • PNGBR2_PACKAGE_LIBPNG
      • JPEGBR2_PACKAGE_JPEGBR2_PACKAGE_LIBJPEG_TURBO(常见更快)
      • GIFBR2_PACKAGE_GIFLIB
      • zlib(通常 libpng 会依赖):BR2_PACKAGE_ZLIB

      同样:LVGL 侧也要在 lv_conf.h 打开对应的 image decoder 支持。

  6. 调试/验证工具(强烈建议开发镜像带上)

    这些不影响"最终量产最小集",但是对于把 LVGL(DRM) 跑通非常关键:

    • BR2_PACKAGE_LIBDRM_INSTALL_TESTS(上面提过,必须推荐)
    • BR2_PACKAGE_EVTEST(上面提过)
    • (可选)BR2_PACKAGE_STRACE:追 open("/dev/dri/card0") 失败原因
    • (可选)BR2_PACKAGE_GDB:调试 DRM 初始化/输入线程
    • (可选)BR2_PACKAGE_PERF:卡顿/掉帧分析
  7. 权限/seat("是否必需"取决于怎么运行 LVGL

    LVGL DRM 直出一般最简单是 root 运行,可以完全不管 seat

    但如果希望非 root 运行、更正规地管权限,可能需要:

    • BR2_PACKAGE_SEATD
    • BR2_PACKAGE_LIBSEAT

    作用:让非 root 程序也能稳定访问 DRM输入设备(类似 systemd/logind 的作用)。

    缺失表现:非 root 时打开 /dev/dri/card0 /dev/input/event* 失败(权限不足)。

    这块是少数与系统形态有关的点,但"基础包选择"本身依旧是 BR2_ 关键字。

2、完整关键词清单

可以把下面这份当成 LVGL方案的完整配置关键词列表:

  1. 核心必备
    • BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV
    • BR2_PACKAGE_LIBDRM
    • BR2_PACKAGE_LVGL(若你的 Buildroot 树提供)
      • 如果没有该包:需要自建 BR2_PACKAGE_LVGL_APP(自定义)
    • (强烈建议)BR2_PACKAGE_LIBDRM_INSTALL_TESTS
  2. 输入(推荐)
    • BR2_PACKAGE_EVTEST
    • BR2_PACKAGE_LIBINPUT(可选)
    • BR2_PACKAGE_TSLIB(可选,触摸需校准时)
  3. 字体/资源(按需)
    • BR2_PACKAGE_FREETYPE(用 TTF 时建议)
    • BR2_PACKAGE_FONTCONFIG(可选)
    • BR2_PACKAGE_LIBPNG / BR2_PACKAGE_JPEG(或 BR2_PACKAGE_LIBJPEG_TURBO) / BR2_PACKAGE_GIFLIB(用到对应图片格式就选)
  4. 权限/seat(非 root 推荐)
    • BR2_PACKAGE_SEATD
    • BR2_PACKAGE_LIBSEAT
3、排查方式
  1. 一次性 grep 看当前 defconfig/.config 是否包含这些符号

    bash 复制代码
    grep -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
  2. menuconfig 内搜索

    make menuconfig → 按 / 输入:

    • BR2_PACKAGE_LVGL
    • BR2_PACKAGE_LIBDRM
    • BR2_PACKAGE_LIBDRM_INSTALL_TESTS
    • BR2_PACKAGE_LIBINPUT
    • BR2_PACKAGE_TSLIB
    • BR2_PACKAGE_FREETYPE
    • BR2_PACKAGE_LIBPNG
    • seatd / libseat
  3. "方案是否配置成功" 的判定标准

    1. modetest -M rockchipDRM 输出存在、connected、有 mode
    2. evtest /dev/input/eventX (触摸事件正常)
    3. 运行 LVGL DRM demo (能刷屏、触摸有响应)
    4. 如果用 freetype/图片:中文显示 、PNG/JPEG 显示
相关推荐
迷途知返-3 小时前
服务器——那些年我踩过的坑
linux
landonVM3 小时前
Linux 上搭建 Web 服务器
linux·服务器·前端
云游云记3 小时前
nesbot/carbon 常用功能总结
linux·运维·服务器
慵懒的猫mi4 小时前
从XDG正式支持如意玲珑(Linyaps)看如意玲珑的发展与架构演进
linux·开源软件·deepin
landonVM4 小时前
Linux 下的高效压缩工具 Zstandard
linux·运维·服务器
EmbedLinX4 小时前
Linux之内存管理
linux·服务器·c语言·c++
番茄灭世神4 小时前
Linux从入门到进阶第一章
linux·计算机·操作系统
Nightwish54 小时前
Linux随记(二十八)
linux·运维·服务器
Zach_yuan4 小时前
Socket 编程基础
linux·服务器