四、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 显示
相关推荐
摇滚侠6 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush46 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5206 小时前
Linux 11 动态监控指令top
linux
laowangpython7 小时前
Photoshop 2025 下载安装全攻略
其他·ui·photoshop
不会C语言的男孩8 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
古城小栈8 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix
凡人叶枫9 小时前
Effective C++ 条款42:了解 typename 的双重意义
java·linux·服务器·c++
2601_961875249 小时前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant
java_cj9 小时前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes
lsyeei10 小时前
linux 系统目录详解
linux·运维·服务器