作者:Zhanglong
日期:2025年4月29日
标签:RK3568, HDMI, VOP, DRM, 嵌入式, 显示驱动
目的:本文旨在介绍 Rockchip RK3568 平台上 HDMI 输出配置与调试的核心步骤,帮助开发者快速掌握设备树修改、内核编译、VOP 和 Connector 状态检查,以及 HDMI 和 CEC 控制技巧,适用于嵌入式显示系统开发与调试场景。
亮点:通过实际案例和命令演示,展示从设备树配置到 HDMI 输出控制的完整流程,结合 VOP、DRM 和 CEC 状态检查,显著提升开发效率。文档结构清晰,命令与输出直观,完美适配 CSDN 技术博客发布。
RK3568 HDMI 配置与调试指南
本文介绍在 Rockchip RK3568 平台上配置和调试 HDMI 输出的步骤,包括修改设备树、编译内核、查看 VOP 和 Connector 状态,以及控制 HDMI 工作状态和 CEC。所有命令和输出均基于实际开发板操作,适合嵌入式开发者参考。
1. 修改设备树
编辑设备树文件 rk3568-evb.dtsi
,配置 HDMI 使用 VP0 输出。
1.1 查看设备树文件
rockchip@ubuntu22:/work/rockchip/zhanglong/rk3568/sdkv1.4.0_linux5.10/kernel/arch/arm64/boot/dts/rockchip$ vi rk3568-evb.dtsi
1.2 修改内容
以下配置已默认修改:
/* 使能 VP0 */
&hdmi_in_vp0 {
status = "okay";
};
/* 禁用 VP1 */
&hdmi_in_vp1 {
status = "disabled";
};
/* 配置 HDMI 使用 VP0 输出 */
&route_hdmi {
status = "okay";
connect = <&vp0_out_hdmi>;
};
说明:
&hdmi_in_vp0
:启用 VP0 作为 HDMI 输入。&hdmi_in_vp1
:禁用 VP1,避免冲突。&route_hdmi
:指定 HDMI 连接到 VP0 输出。
2. 编译并更新内核
编译内核生成 boot.img
,并将其更新到开发板。
rockchip@ubuntu22:/work/rockchip/zhanglong/rk3568/sdkv1.4.0_linux5.10$ ./build.sh kernel
步骤:
- 运行上述命令编译内核。
- 将生成的
boot.img
刷写到开发板(具体方法取决于开发板刷机工具,如rkdeveloptool
或 fastboot)。 - 重启开发板使新内核生效。
3. 查看 VOP 接口状态
检查视频输出端口 (VOP) 的状态,确认 HDMI 输出正常。
root@rk3568-buildroot:/# cat /sys/kernel/debug/dri/0/summary
输出:
Video Port0: ACTIVE
Connector: HDMI-A-1
bus_format[2025]: YUV8_1X24
overlay_mode[1] output_mode[f] color_space[3], eotf:0
Display mode: 1920x1080p60
clk[148500] real_clk[148500] type[48] flag[5]
H: 1920 2008 2052 2200
V: 1080 1084 1089 1125
Smart0-win0: ACTIVE
win_id: 0
format: XR24 little-endian (0x34325258) SDR[0] color_space[0] glb_alpha[0xff]
rotate: xmirror: 0 ymirror: 0 rotate_90: 0 rotate_270: 0
csc: y2r[0] r2y[1] csc mode[1]
zpos: 0
src: pos[0, 0] rect[1920 x 1080]
dst: pos[0, 0] rect[1920 x 1080]
buf[0]: addr: 0x00000000ee7a9000 pitch: 7680 offset: 0
说明:
Video Port0: ACTIVE
:VP0 已激活。Connector: HDMI-A-1
:HDMI-A-1 连接器正常工作。Display mode: 1920x1080p60
:当前分辨率为 1920x1080@60Hz。Smart0-win0: ACTIVE
:显示窗口正常,格式为 XR24(RGB888)。
4. 查看 Connector 状态
检查 DRM 子系统中的显卡和连接器状态。
4.1 列出显卡设备
root@rk3568-buildroot:/# ls /sys/class/drm
输出:
card0 card0-HDMI-A-1 card0-LVDS-1 card0-Writeback-1 card1 renderD128 renderD129 version
说明:card0-HDMI-A-1
表示 HDMI 连接器,card0-LVDS-1
表示 LVDS 接口。
4.2 查看 HDMI Connector 详情
以 card0-HDMI-A-1
为例,查看其目录内容:
root@rk3568-buildroot:/# ls /sys/class/drm/card0-HDMI-A-1
输出:
ddc device dpms edid enabled modes power status subsystem uevent
关键文件说明:
enabled
:连接器使能状态(是否激活)。status
:连接状态(connected
或disconnected
)。modes
:支持的分辨率列表。
5. 查看 HDMI 工作状态
检查 HDMI 控制器的运行状态。
root@rk3568-buildroot:/# cat /sys/kernel/debug/dw-hdmi/status
输出:
PHY: enabled Mode: HDMI
Pixel Clk: 148500000Hz TMDS Clk: 148500000Hz
Color Format: YUV444 Color Depth: 8 bit
Colorimetry: ITU.BT709 EOTF: Off
说明:
PHY: enabled
:HDMI PHY 已启用。Pixel Clk: 148500000Hz
:像素时钟为 148.5 MHz,匹配 1920x1080@60Hz。Color Format: YUV444
:颜色格式为 YUV444,8 位色深。
6. 查看 HDMI CEC 工作状态
检查 HDMI CEC(消费电子控制)功能的状态。
root@rk3568-buildroot:/# cat /sys/kernel/debug/cec/cec0/status
输出:
configured: 0
configuring: 0
phys_addr: 1.0.0.0
number of LAs: 0
LA mask: 0x0000
pending transmits: 0
字段说明:
configured
:CEC 适配器是否配置完成(1:完成,0:未完成)。configuring
:是否正在配置(1:是,0:否)。phys_addr
:CEC 物理地址(f.f.f.f
表示未获取)。number of LAs
:逻辑地址数量(通常为 1)。LA mask
:逻辑地址掩码,0x0000 表示未绑定。pending transmits
:待发送的 CEC 消息数量。
当前状态:CEC 未配置(configured: 0
),未绑定逻辑地址(LA mask: 0x0000
)。
7. 强制控制 HDMI 状态
通过 DRM 接口手动控制 HDMI 输出状态,支持强制使能、禁用或恢复热插拔检测。
7.1 强制使能 HDMI
root@rk3568-buildroot:/# echo on > /sys/class/drm/card0-HDMI-A-1/status
效果:强制激活 HDMI 输出,屏幕显示正常。
7.2 强制禁用 HDMI
root@rk3568-buildroot:/# echo off > /sys/class/drm/card0-HDMI-A-1/status
输出日志:
[09:36:46.606] DRM: head 'HDMI-A-1' updated, connector 174 is disconnected.
[ 779.349762] rockchip-vop2 fe040000.vop: [drm:vop2_crtc_atomic_disable] Crtc atomic disable vp0
[09:36:46.606] Detected a monitor change on head 'LVDS-1', not bothering to do anything about it.
[09:36:46.606] Output 'HDMI-A-1' no heads left, disabling.
[09:36:46.606] Disabling output HDMI-A-1
效果:HDMI 输出关闭,屏幕熄灭。
7.3 恢复热插拔检测
root@rk3568-buildroot:/# echo detect > /sys/class/drm/card0-HDMI-A-1/status
输出日志:
[09:38:02.000] DRM: head 'HDMI-A-1' updated, connector 174 is connected, EDID make 'DEL', model 'DELL SE2422H', serial 'BG7JWN3'
Supported EOTF modes: SDR
[09:38:02.001] Detected a monitor change on head 'LVDS-1', not bothering to do anything about it.
[09:38:02.001] HDMI-A-1 using at least 2 buffers
[09:38:02.001] Output 'HDMI-A-1' attempts EOTF mode: SDR
[09:38:02.001] Output 'HDMI-A-1' using color profile: stock sRGB color profile
[09:38:02.001] Chosen EGL config details: id: 9 rgba: 8 8 8 0 buf: 24 dep: 0 stcl: 0 int: 0-1 type: win|pbf|swap_preserved vis_id: XRGB8888 (0x34325258)
[09:38:02.002] Output HDMI-A-1 (crtc 85) video modes:
1920x1080@60.0, preferred, current, 148.5 MHz
1920x1080@75.0, 174.5 MHz
1920x1080@60.0 16:9, 148.5 MHz
1920x1080@59.9 16:9, 148.4 MHz
1920x1080i@60.0, 74.2 MHz
1920x1080i@60.0 16:9, 74.2 MHz
1920x1080i@59.9 16:9, 74.2 MHz
1920x1080@50.0, 148.5 MHz
1920x1080i@50.0 16:9, 74.2 MHz
1280x1024@75.0, 135.0 MHz
1280x1024@60.0, 108.0 MHz
1152x864@75.0, 108.0 MHz
1280x720@60.0 16:9, 74.2 MHz
1280x720@59.9 16:9, 74.2 MHz
1280x720@50.0 16:9, 74.2 MHz
1024x768@75.0, 78.8 MHz
1024x768@60.0, 65.0 MHz
800x600@60.3, 40.0 MHz
800x600@56.2, 36.0 MHz
720x576@50.0 4:3, 27.0 MHz
720x576@50.0 16:9, 27.0 MHz
720x480@60.0 16:9, 27.0 MHz
720x480@59.9 16:9, 27.0 MHz
720x480@59.9 4:3, 27.0 MHz
640x480@75.0, 31.5 MHz
640x480@60.0 4:3, 25.2 MHz
640x480@59.9, 25.2 MHz
640x480@59.9 4:3, 25.2 MHz
720x400@70.1, 28.3 MHz
[09:38:02.003] Output HDMI-A-1 changed to mirror output
[ 854.782342] rockchip-vop2 fe040000.vop: [drm:vop2_crtc_atomic_enable] Update mode to 1920x1080p60, type: 11(if:800, flag:0x0) for vp0 dclk: 148500000
效果:
- HDMI 恢复热插拔检测,屏幕重新显示。
- 日志显示连接器识别到显示器(DELL SE2422H),支持多种分辨率,当前为 1920x1080@60Hz。
8. 注意事项
- 设备树修改:确保
rk3568-evb.dtsi
修改正确,VP0 启用且 VP1 禁用,避免输出冲突。 - 内核编译:编译后确认
boot.img
成功生成,并正确刷写到开发板。 - HDMI 状态检查:
- 使用
cat /sys/class/drm/card0-HDMI-A-1/status
确认连接状态(connected
或disconnected
)。 - 检查
/sys/kernel/debug/dw-hdmi/status
确保 PHY 和时钟正常。
- 使用
- CEC 配置:当前 CEC 未配置(
configured: 0
),如需使用需进一步初始化逻辑地址。 - 日志分析:强制禁用或恢复 HDMI 时,检查日志(如
dmesg
)确认 VOP 和 DRM 状态。
9. 总结
通过修改设备树、编译内核、检查 VOP 和 Connector 状态,以及控制 HDMI 和 CEC,本文展示了在 RK3568 平台上配置和调试 HDMI 输出的完整流程。关键步骤包括:
- 配置 VP0 作为 HDMI 输出。
- 使用 DRM 调试接口(
/sys/kernel/debug/dri
和/sys/class/drm
)监控状态。 - 手动控制 HDMI 使能/禁用,验证热插拔功能。
开发者可参考本文命令和输出,快速验证和调试 RK3568 的 HDMI 功能。