在跟 AI 对话了一周后仍未解决,几乎要放弃了,想到 V 友们都是大佬,所以来求帮助了。
800 * 1280 的 mipi屏幕,采用 LVGL显示,需要旋转实现横屏显示,因为 DRM当前 CRTC 绑定的 plane 不支持旋转,所以采用 frambuffer 显示。
目前问题:
- 屏幕实际采用 DRM 驱动,LVGL 可以使用/dev/fb0 来驱动显示。是因为 DRM 驱动通过 fbdev emulation 暴露了一个兼容的 /dev/fb0 吗?
- 为什么/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 - 采用 DRM 驱动的话刷新率可以提高吗?
- 如何修改 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, };


