如何使能RDK X5 Module+官方载板上的HDMI显示(反复试了一直无显示)

[板卡类型]:[RDK X5 Module] 和官方载板Carrier Board,运行的镜像为rdk-x5-ubuntu22-preinstalled-desktop-3.5.0-arm64
[问题分类]:[Linux开发][硬件开发][BSP]
[问题描述]:系统Run起来后,通过RDK studio的USB type-c闪连已连上设备。但用HDMI连上显示器后,显示器上一直没有内容显示(此套HDMI线+显示器在电脑主机上工作是正常的)
root@ubuntu:~# sudo systemctl stop lightdm
root@ubuntu:~# xrandr
Screen 0: minimum 0 x 0, current 1536 x 864, maximum 32768 x 32768
default connected primary 1536x864+0+0 406mm x 228mm
1536x864 0.00*
root@ubuntu:~#

xrandr 显示的是 default(fbdev 回退)而不是 HDMI-0,说明系统当前没走 HDMI 显示驱动,多半是显示输出被配置成了 MIPI DSI 模式(X5 默认应是 HDMI,无需额外配置)。

1. 先确认/切回 HDMI 输出模式

ls -l /etc/X11/xorg.conf.d/

正常 HDMI 模式下应是 xorg_hdmi_ignore.conf.disable + xorg_dsi_ignore.conf。如果反了,执行:

sudo srpi-config
# 2 Display Options > D1 Display Choice > 2 HDMI,然后重启

2. 看内核层是否识别到 HDMI 连接器

cat /sys/class/drm/card*-HDMI*/status
dmesg | grep -i hdmi

如果 status 是 disconnected,说明热插拔/EDID 没读到——先把显示器和线接好再上电试一次(部分显示器热插拔检测不灵敏)。

3. 不要 stop lightdm 后再查

sudo systemctl stop lightdm 之后跑 xrandr 看到的就是回退结果,没有参考意义。让桌面正常跑起来,用 sunrise 用户查:

DISPLAY=:0 xrandr

有 HDMI-0 connected 才算驱动正常挂上;仍显示 default 的话,贴一下 grep -iE "hdmi|EE" /var/log/Xorg.0.log | head -30 的输出,再进一步定位。

官方文档:X5 显示屏使用(HDMI 为默认输出、srpi-config 切换方法)

使用 srpi-config 工具,从1 DSI 改为2 HDMI,不生效。再进去还是1 DSI

切换后仍显示 DSI,先按官方方法直接核对配置文件,不用反复在菜单里切。运行 ls -l /etc/X11/xorg.conf.d/;如果下面两条命令的源文件都存在,执行:

sudo mv /etc/X11/xorg.conf.d/xorg_hdmi_ignore.conf /etc/X11/xorg.conf.d/xorg_hdmi_ignore.conf.disable
sudo mv /etc/X11/xorg.conf.d/xorg_dsi_ignore.conf.disable /etc/X11/xorg.conf.d/xorg_dsi_ignore.conf

接好 HDMI 后重启,让 lightdm 正常运行。Studio 里的 xrandr default 不能单独判断实体 HDMI 状态;若仍无画面,请贴上述目录列表、cat /sys/class/drm/card*-HDMI*/status 和 sudo dmesg | grep -iE "hdmi|drm" 的输出;文件不存在也先贴列表,别新建空配置。

官方切换说明:https://developer.d-robotics.cc/rdk_x_doc/Quick_start/display_use/display_rdkx5

结论先说:官方文档里明确写了 srpi-config 的显示切换「仅 RDK X5 支持」,且 srpi-config/config.txt 的适用范围列表里也没有 X5 Module,所以你在 X5 Module 上改 Display Choice 很可能根本没写入生效,再进去自然还是 1 DSI。别在菜单里反复切了,直接用官方命令行方式切:

  1. 先看当前状态:
ls -l /etc/X11/xorg.conf.d/
  1. 若 xorg_hdmi_ignore.conf 是启用状态(没有 .disable 后缀),按官方方法切回 HDMI:
sudo mv /etc/X11/xorg.conf.d/xorg_hdmi_ignore.conf /etc/X11/xorg.conf.d/xorg_hdmi_ignore.conf.disable
sudo mv /etc/X11/xorg.conf.d/xorg_dsi_ignore.conf.disable /etc/X11/xorg.conf.d/xorg_dsi_ignore.conf
  1. 顺手确认 /boot/config.txt 里没有残留的 DSI 屏 dtoverlay=dsi-... 行,有就删掉,然后重启。

  2. 重启后验证(不要 stop lightdm):

cat /sys/class/drm/card*-HDMI*/status
DISPLAY=:0 xrandr | head -5

status 为 connected、xrandr 出现 HDMI-0 就说明 HDMI 通路正常了。

如果第 1 步发现这些配置文件根本不存在,或者切完 status 仍是 disconnected,把 ls 结果和 sudo dmesg | grep -iE "hdmi|drm" 的输出贴上来,再往下看。

官方文档:X5 显示屏使用(HDMI 切换命令行方法)、srpi-config 工具配置

root@ubuntu:~# ls -l /etc/X11/xorg.conf.d/
total 24
-rw-r–r-- 1 root root 159 Apr 8 2026 10-disable-screensaver.conf
-rw-r–r-- 1 root root 202 Apr 8 2026 1-resolution.conf.disable
-rw-r–r-- 1 root root 133 Apr 8 2026 20-software-cursor.conf.disable
-rwxr-xr-x 1 root root 1088 Apr 8 2026 2-dr-accel.conf
-rw-r–r-- 1 root root 79 Apr 8 2026 xorg_dsi_ignore.conf
-rw-r–r-- 1 root root 80 Apr 8 2026 xorg_hdmi_ignore.conf.disable

root@ubuntu:~# sudo mv /etc/X11/xorg.conf.d/xorg_hdmi_ignore.conf /etc/X11/xorg.conf.d/xorg_hdmi_ignore.conf.disable
mv: cannot stat ‘/etc/X11/xorg.conf.d/xorg_hdmi_ignore.conf’: No such file or directory

root@ubuntu:~# sudo mv /etc/X11/xorg.conf.d/xorg_dsi_ignore.conf.disable /etc/X11/xorg.conf.d/xorg_dsi_ignore.conf
mv: cannot stat ‘/etc/X11/xorg.conf.d/xorg_dsi_ignore.conf.disable’: No such file or directory

root@ubuntu:~# cat /sys/class/drm/card*-HDMI*/status
disconnected

root@ubuntu:~# sudo dmesg | grep -iE “hdmi|drm”
[ 0.164314] platform 3e000000.dc8000Nano: Fixed dependency cycle(s) with /soc/disp_apb/hdmi-encoder
[ 0.164681] platform 3e010000.bt1120: Fixed dependency cycle(s) with /soc/disp_apb/hdmi-encoder
[ 0.164874] platform 3e000000.disp_apb:bt1120_bridge: Fixed dependency cycle(s) with /soc/dsp_apb/i2c@320a0000/hdmi_bridge@3b
[ 0.165374] platform 3e010000.bt1120: Fixed dependency cycle(s) with /soc/disp_apb/hdmi-encoder
[ 0.165459] platform 3e000000.dc8000Nano: Fixed dependency cycle(s) with /soc/disp_apb/hdmi-encoder
[ 0.165532] platform 3e000000.disp_apb:hdmi-encoder: Fixed dependency cycle(s) with /soc/disp_apb/bt1120-syscon-bridge
[ 0.165560] platform 3e000000.disp_apb:hdmi-encoder: Fixed dependency cycle(s) with /soc/disp_apb/dc8000Nano@3e000000
[ 0.165657] platform 3e000000.disp_apb:hdmi-encoder: Fixed dependency cycle(s) with /soc/disp_apb/bt1120@3e010000
[ 0.165809] platform 3e000000.disp_apb:hdmi-encoder: Fixed dependency cycle(s) with /soc/disp_apb/bt1120-syscon-bridge
[ 0.166030] platform 3e000000.disp_apb:bt1120-syscon-bridge: Fixed dependency cycle(s) with /soc/disp_apb/hdmi-encoder
[ 0.198383] platform 3e000000.disp_apb:bt1120_bridge: Fixed dependency cycle(s) with /soc/dsp_apb/i2c@320a0000/hdmi_bridge@3b
[ 2.844598] systemd[1]: Starting Load Kernel Module drm…
[ 4.534375] sii902x 7-003b: Looking up iovcc-supply property in node /soc/dsp_apb/i2c@320a0000/hdmi_bridge@3b failed
[ 4.534560] sii902x 7-003b: Looking up cvcc12-supply property in node /soc/dsp_apb/i2c@320a0000/hdmi_bridge@3b failed
[ 8.528923] [drm] Initialized vivante 1.0.0 20170808 for 3c000000.gc8000 on minor 0
[ 8.739812] vs-drm 3e000000.disp_apb:display-subsystem: bound 3e080000.vs-sif (ops sif_component_ops [vs_drm])
[ 8.739967] drivers/gpu/drm/verisilicon/dc/dc_proc/gc_proc.c: 593
[ 8.744312] drivers/gpu/drm/verisilicon/dc/dc_proc/gc_proc.c: 604
[ 8.744532] vs-drm 3e000000.disp_apb:display-subsystem: bound 3e000000.dc8000Nano (ops dc_component_ops [vs_drm])
[ 8.744776] vs-drm 3e000000.disp_apb:display-subsystem: bound 3e010000.bt1120 (ops bt1120_component_ops [vs_drm])
[ 8.744827] vs-drm 3e000000.disp_apb:display-subsystem: bound 3e000000.disp_apb:bt1120_bridge (ops bt1120_bridge_component_ops [vs_drm])
[ 8.744869] vs-drm 3e000000.disp_apb:display-subsystem: bound 3e000000.disp_apb:bt1120_bridge_wb (ops bt1120_bridge_component_ops [vs_drm])
[ 8.744972] vs-drm 3e000000.disp_apb:display-subsystem: bound 3e000000.disp_apb:dsi-encoder (ops encoder_component_ops [vs_drm])
[ 8.745067] vs-drm 3e000000.disp_apb:display-subsystem: bound 3e000000.disp_apb:hdmi-encoder (ops encoder_component_ops [vs_drm])
[ 8.752824] [drm] Initialized vs-drm 1.0.0 20191101 for 3e000000.disp_apb:display-subsystem on minor 1
root@ubuntu:~#

软件这边其实已经是 HDMI 模式了:你那两条 mv 报 “No such file” 只是因为文件本来就处于目标状态(xorg_dsi_ignore.conf 生效 + xorg_hdmi_ignore.conf.disable),dmesg 里 sii902x 桥接驱动也 probe 成功。真正的关键信息是 status: disconnected——板子没收到显示器的 HPD 热插拔检测信号,问题基本在物理连接层,不在系统配置。

排查建议:

  1. 注意上电顺序:先给显示器上电并切到对应 HDMI 输入源,再插线/重启板子。HPD 是显示器主动发出的信号,屏幕没上电或处于深度待机时 status 就会一直是 disconnected。插拔后观察状态是否变化:
watch -n 1 cat /sys/class/drm/card*-HDMI*/status

变成 connected 后 xrandr 应能看到 HDMI-0,桌面即会输出。

  1. 换一根确认好的 HDMI 线、换一个显示器(或电视)交叉测试,插头务必插到底。部分显示器 HPD 响应慢或不响应,优先试普通 HDMI 显示器而不是便携屏/转接坞。

  2. 如果换线换屏、先开屏后开机,status 仍始终 disconnected,那大概率是载板 HDMI 接口或 HPD 线路的硬件问题,建议带上以上测试结论联系官方售后处理。

官方文档(X5 默认即 HDMI 输出,支持最大 1080P60):1.4 显示屏使用 | RDK X3/X5 DOC

这份目录已经是 HDMI 配置,两个 mv 报错是因为文件已切好,不用再改。现在关键是 disconnected:内核还没检测到显示器连接,先让显示器开机并选对 HDMI 输入,HDMI 直接接载板、不经过转接器,再把板子断电重启;启动后插拔一次 HDMI,分别运行 cat /sys/class/drm/card*-HDMI*/status 看状态是否变化,有条件再换一台显示器对照。

如果始终是 disconnected,请补载板版本及 rdkos_info 输出,下一步需要核对 Module 的板级配置和 HDMI 检测链路;仅凭目前日志还不能判定接口损坏。

官方显示说明:https://developer.d-robotics.cc/rdk_x_doc/Quick_start/display_use/display_rdkx5