V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jettming
V2EX  ›  程序员

关于在 RK3568 上屏幕显示的问题

  •  
  •   jettming · 13 小时 12 分钟前 · 526 次点击

    在跟 AI 对话了一周后仍未解决,几乎要放弃了,想到 V 友们都是大佬,所以来求帮助了。
    800 * 1280 的 mipi屏幕,采用 LVGL显示,需要旋转实现横屏显示,因为 DRM当前 CRTC 绑定的 plane 不支持旋转,所以采用 frambuffer 显示
    目前问题:

    1. 屏幕实际采用 DRM 驱动,LVGL 可以使用/dev/fb0 来驱动显示。是因为 DRM 驱动通过 fbdev emulation 暴露了一个兼容的 /dev/fb0 吗?
    2. 为什么/dev/fb0 在滑动的时候刷新率很低,修改 LV_DEF_REFR_PERIOD 并无改善,在划动时 FPS 最低到 5 。目前以下配置:
      /** Default display refresh, input device read and animation step period. */
      #define LV_DEF_REFR_PERIOD  33      /**< [ms] */ 
      /** Driver for /dev/fb */
      
      #define LV_USE_LINUX_FBDEV      1
      #if LV_USE_LINUX_FBDEV
          #define LV_LINUX_FBDEV_BSD           0
          #define LV_LINUX_FBDEV_RENDER_MODE   LV_DISPLAY_RENDER_MODE_PARTIAL
          #define LV_LINUX_FBDEV_BUFFER_COUNT  2
          #define LV_LINUX_FBDEV_BUFFER_SIZE   1280 * 400
          #define LV_LINUX_FBDEV_MMAP          1
      #endif
      
    3. 采用 DRM 驱动的话刷新率可以提高吗?
    4. 如何修改 DRM 当前 CRTC 绑定的 plane 。已做如下尝试:
      // 修改 rockchip_vop2_reg.c 中 plane_mask 对应的 rk3568_vp_plane_mask ,命令 modetest -M rockchip 得到的信息并无变化
      static const struct vop2_data rk3568_vop = {
      	.version = VOP_VERSION_RK3568,
      	.nr_vps = 3,
      	.nr_mixers = 5,
      	.nr_layers = 6,
      	.nr_gammas = 1,
      	.max_input = { 4096, 2304 },
      	.max_output = { 4096, 2304 },
      	.ctrl = &rk3568_vop_ctrl,
      	.sys_grf = &rk3568_sys_grf_ctrl,
      	.axi_intr = rk3568_vop_axi_intr,
      	.nr_axi_intr = ARRAY_SIZE(rk3568_vop_axi_intr),
      	.vp = rk3568_vop_video_ports,
      	.wb = &rk3568_vop_wb_data,
      	.layer = rk3568_vop_layers,
      	.win = rk3568_vop_win_data,
      	.win_size = ARRAY_SIZE(rk3568_vop_win_data),
      	.dump_regs = rk3568_dump_regs,
      	.dump_regs_size = ARRAY_SIZE(rk3568_dump_regs),
      	.plane_mask = rk3568_vp_plane_mask[0],
      	.plane_mask_base = RK3568_PLANE_MASK_BASE,
      };
      
    第 1 条附言  ·  2 小时 22 分钟前
    运行时,查看 cpu 状态,lvgl 进程只占用了 5%左右。
    5 条回复    2025-09-03 10:40:45 +08:00
    zzzyk
        1
    zzzyk  
       12 小时 50 分钟前
    感觉是 lvgl 的 display 驱动问题。3568 不至于带不动 800 * 1280 的屏幕。
    yolee599
        2
    yolee599  
       1 小时 58 分钟前 via Android
    1. 是的,内核开启了 CONFIG_FB 就会有 framebuffer 驱动。
    2 ,3. framebuffer 的效率确实比 DRM 更差,屏幕分辨率越大差别越明显,可以用过双缓冲缓解一下。
    4. 不要随便改 VOP 驱动,会改出问题的。
    heyjim75111
        3
    heyjim75111  
       1 小时 58 分钟前
    3568 的 plane 肯定支持旋转啊,可以在 lvgl 的 drm 应用层驱动里修改配置
    yolee599
        4
    yolee599  
       1 小时 57 分钟前 via Android
    你要旋转应该改屏幕的初始化寄存器参数
    xomix
        5
    xomix  
       26 分钟前
    lvgl 问题,我这边标准的 RK3568 ,触摸屏安卓都不卡,上个 xfce 的 debian 完全不卡。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6138 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 03:07 · PVG 11:07 · LAX 20:07 · JFK 23:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.