RK3568 HDMI 配置与调试指南

作者: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

步骤

  1. 运行上述命令编译内核。
  2. 将生成的 boot.img 刷写到开发板(具体方法取决于开发板刷机工具,如 rkdeveloptool 或 fastboot)。
  3. 重启开发板使新内核生效。

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:连接状态(connecteddisconnected)。
  • 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 确认连接状态(connecteddisconnected)。
    • 检查 /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 功能。

### RK3566 HDMI驱动调试教程及常见问题解决 #### 一、HDMIIN设备驱动特性 对于RK3568/RK3566平台上的HDMI输入(HDMIIN),其设备驱动相较于常规摄像头驱动增加了特定的功能模块来适应实际应用场景的需求,特别是针对拔插检测和分辨率自动调整机制进行了优化处理[^1]。 #### 二、具体实现方式 以采用龙讯公司生产的LT6911UXC芯片为例,在该实例中实现了完整的HDMI接收器功能。通过定制化的Linux内核补丁文件,可以增强系统的兼容性和稳定性,确保能够正确解析并呈现来自外部源设备的数据流[^3]。 ```bash # 应用必要的内核补丁以支持强制输出模式和其他改进措施 cd /path/to/kernel/source git apply --directory=drivers/gpu/drm/bridge/synopsys ../patches/rk628-for-all/v27-240730/kernel/*.patch ``` #### 三、测试流程工具使用 为了验证上述改动的有效性以及排查可能存在的问题,建议利用`modetest`这类命令行实用程序来进行初步诊断工作。这一步骤可以帮助确认当前配置下的基本显示性能指标是否正常运作,并进一步探索更复杂的交互行为如热插拔响应速度或是不同分辨率间的无缝过渡表现等[^2]。 ```bash # 列举可用的DRM连接器及其状态信息 modetest -c | grep Connector # 查询指定ID号对应的详细参数设置情况 modetest -D <connector_id> ``` #### 四、遇到的问题及对策 当面对诸如画面闪烁、色彩偏差或者是音频同步失真等情况时,则需深入分析日志记录寻找线索;同时也可以尝试更新至最新版本固件或查阅官方文档获取更多技术支持资源。另外值得注意的是某些高级特性的启用可能会依赖额外硬件组件的支持程度,因此务必提前做好充分调研再做决定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值