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

4 天前
 jettming

在跟 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,
    };
    
1228 次点击
所在节点    程序员
8 条回复
zzzyk
4 天前
感觉是 lvgl 的 display 驱动问题。3568 不至于带不动 800 * 1280 的屏幕。
yolee599
4 天前
1. 是的,内核开启了 CONFIG_FB 就会有 framebuffer 驱动。
2 ,3. framebuffer 的效率确实比 DRM 更差,屏幕分辨率越大差别越明显,可以用过双缓冲缓解一下。
4. 不要随便改 VOP 驱动,会改出问题的。
heyjim75111
4 天前
3568 的 plane 肯定支持旋转啊,可以在 lvgl 的 drm 应用层驱动里修改配置
yolee599
4 天前
你要旋转应该改屏幕的初始化寄存器参数
xomix
3 天前
lvgl 问题,我这边标准的 RK3568 ,触摸屏安卓都不卡,上个 xfce 的 debian 完全不卡。
jettming
3 天前
jettming
3 天前
@yolee599 #2 谢谢答复,#define LV_LINUX_FBDEV_BUFFER_COUNT 2 已使用了双缓冲
jettming
3 天前
@xomix #5 挺意外的跑满了一个核,FPS 只有 5.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1156673

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX