修改这个图片

sysdrv/source/kernel/logo.bmp

build.sh构建内核就好

阶段问题描述根因分析解决方案当前状态
U-Boot 显示 logoU-Boot 阶段屏幕 logo 正常显示无异常-正常
内核启动 logo 消失切换内核瞬间开机 logo 黑屏消失U-Boot panel 驱动配置错误video,flags,参数配置为 CSYNC,正确应为 NHSYNC;导致内核rockchip_drm_logo.c屏幕模式匹配失败,CRTC 显示通道被关闭修改修复 U-Boot 驱动文件panel-lh24030c50.c内同步标志位配置已修复
内核持续显示 logo修复 U-Boot 驱动后,开机 logo 可从 U-Boot 阶段平滑过渡至内核阶段,无黑屏断层驱动同步参数修正后,内核rockchip_drm_show_logo()可正常无缝承接画面输出重新编译烧录 U-Boot 固件即可生效验证通过

文件路径:

rv1106/sysdrv/source/kernel/drivers/gpu/drm/rockchip/rockchip_drm_logo.c

匹配逻辑在 setup_initial_state() 函数,核心是 679-689 行:

679: list_for_each_entry(mode, &connector->modes, head) {
680:     if (mode->clock == set->clock &&                    // 7MHz
681:         mode->hdisplay == set->hdisplay &&              // 240
682:         mode->vdisplay == set->vdisplay &&              // 320
683:         mode->crtc_hsync_end == set->crtc_hsync_end &&  // 288
684:         mode->crtc_vsync_end == set->crtc_vsync_end &&  // 332
685:         drm_mode_vrefresh(mode) == set->vrefresh &&     // 70
689:         mode->flags == (set->flags & DRM_MODE_FLAG_ALL) // ← 这里
690:     ) {
691:         found = 1;
692:         match = 1;
693:         break;
694:     }
695: }
697: if (!found) {
698:     ret = -EINVAL;
700:     dev_err(..., "can't found any match mode\n");  // 不匹配 → CRTC 关闭
709:     goto error_conn;
710: }
  • mode = 内核面板模式(来自 DTS timer,flags=NHSYNC|NVSYNC=0x0A)
  • set = U-Boot 写入 route 节点的模式(flags=NVSYNC|CSYNC=0x48 → 不匹配)
  • 689 行 flag 严格相等比较失败 → found=0 → 697 行走 error 路径 → CRTC 被关闭、屏幕灭

需要修改

内核配置

CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_VT=y

内核启动时会调用 rockchip_drm_show_logo() → 它从 U-Boot 继承了 456K 的启动 logo 数据,并通过 DRM atomic commit 把 CRTC 配置为扫描 logo 所在的 framebuffer(rockchip_drm_logo.c:897-1094)。 同时 rockchip_drm_fbdev_init() 创建了 /dev/fb0,分配了一个独立的 fbdev framebuffer(在 CMA 内存中)。 re005 打开 /dev/fb0 写入像素 → 写入的是 fbdev 的 framebuffer,但 CRTC 仍在扫描 logo 的 framebuffer,所以屏幕不更新。