[Linux][RK3399] DRM HDMI 调试小结

本文档针对RK3399平台介绍如何解决HDMI显示器无法正确识别的问题,包括确认显示器EDID识别状态、使用模拟EDID文件进行调试等步骤,并提供了常见错误及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Platform: RK3399
OS: Android 6.0
Kernel: 4.4
Version: v2017.04

调试流程

1. 确认板子是否识别到了显示器的 EDID

 echo 0x1f > /sys/module/drm/parameters/debug

插拔一下hdmi
然后dmesg | grep drm, 看看里面的信息是否解析到了edid

[  405.576876] EDID block is all zeroes
[  405.577224] rockchip-drm display-subsystem: HDMI-A-1: EDID block 0 invalid.
[  405.687232] EDID block is all zeroes
[  405.687590] rockchip-drm display-subsystem: HDMI-A-1: EDID block 0 invalid.

EDID = 0
这个就是显示器被识别为DVI的主因, 当无法读出edid时, hdmi驱动可能就会以dvi显示输出

2. 测一下hdmi驱动是否可以支持hdmi输出

使能 CONFIG_DRM_LOAD_EDID_FIRMWARE
(参考 https://markyzq.gitbooks.io/rockchip_drm_integration_helper/content/zh/drm_config_load_firmware.html

acer_edid.bin :http://download.youkuaiyun.com/download/dearsq/9905985

将附件的 acer_edid.bin 推到板子上, 以下是android上的例子, linux上也可以进行类似操作

adb push acer_edid.bin /data
adb shell:
   mount -o rw,remount /
   cp /data/acer_edid.bin /lib/firmware/
   echo HDMI-A-1:acer_edid.bin > /sys/module/drm_kms_helper/parameters/edid_firmware

采用 acer_edid.bin 模拟 EDID 后分辨率由 DVI 800×600@60HZ 变为 DVI 1920×1080@60HZ 。但是依旧无法识别 HDMI。
热插拔信息:

[  211.948958] [drm:edid_load] Got external EDID base block and 1 extension from "acer_edid.bin" for connector "HDMI-A-1"
[  211.949953] [drm:drm_edid_block_valid] *ERROR* EDID checksum is invalid, remainder is 4
[  212.066567] [drm:edid_load] Got external EDID base block and 1 extension from "acer_edid.bin" for connector "HDMI-A-1"
[  212.067598] [drm:drm_edid_block_valid] *ERROR* EDID checksum is invalid, remainder is 4

错误信息

1. No drm_driver.set_busid() implementation provided by 0x…. Use drm_dev_set_unique() to set the unique

1)dev->driver->set_busid 回调没有被赋值
2)dev->unique == NULL

set_busid 没有对应回调是正常的,RK 平台未对其进行实现,一般在 PC 平台会对其进行实现。

dev->unique == NULL 不正常。
RK VR SDK 中 DRM 框架太旧了,通过升级 DRM 框架解决。

2. drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c:64:2: error: unknown field ‘fb_dmabuf_export’ specified in initializer

.fb_dmabuf_export = rockchip_fbdev_get_dma_buf,

/home/younix/rk_op_linux_3399/kernel/include/linux/fb.h

/* Export the frame buffer as a dmabuf object */
struct dma_buf *(*fb_dmabuf_export)(struct fb_info *info);

3. kernel/drivers/gpu/drm/drm_prime.c:545: undefined reference to ‘dma_buf_get_release_callback_data’

需要对比修改 文件:/home/younix/rk_op_linux_3399/kernel/drivers/dma-buf/dma-buf.c

参考资料

Kernel Doc
https://www.kernel.org/doc/htmldocs/drm/
The DRM/KMS subsystem from a newbie’s point of view
http://events.linuxfoundation.org/sites/events/files/slides/brezillon-drm-kms.pdf
DRM Maintainer 总结的资料:https://markyzq.gitbooks.io/rockchip_drm_integration_helper/content/zh/

<think>好的,我现在需要处理用户关于RK3399芯片的DRM和MIPI接口配置的问题。首先,我要回忆一下之前用户提供的引用资料,特别是引用[1]和引用[3],因为这两个可能与DRMRK3399相关。用户需要了解配置方法或相关信息,所以应该从DRM的基础知识入手,再结合RK3399的具体情况。 首先,DRM(Direct Rendering Manager)是Linux内核中处理图形渲染的子系统,负责管理显示控制器、GPU和显示输出。RK3399作为Rockchip的芯片,应该使用DRM驱动来管理显示设备。接下来,MIPI DSI接口是用于连接显示面板的,配置这部分可能需要在内核设备树(Device Tree)中进行设置。 根据引用[1],DRM的crtc基础知识中提到CRTC负责生成显示时序,而MIPI DSI需要与CRTC绑定。因此,配置RK3399的MIPI可能需要修改设备树的crtc节点,确保其与DSI接口正确连接。同时,引用[3]提到了编译时可能遇到的依赖问题,比如X11头文件缺失,这可能是在配置显示驱动时需要安装相关开发包。 接下来,我需要考虑用户可能的实际配置步骤。例如,修改设备树文件,配置DSI的参数,如时钟频率、通道数等。然后编译内核并确保DRM驱动正确加载。此外,可能需要配置显示管道的绑定,将CRTC、Encoder和Connector正确关联。 用户还可能遇到问题,比如屏幕无显示或时序不正确,这时候需要检查设备树配置是否正确,或者调试DRM驱动的日志信息。另外,参考OpenHarmony的编译问题,用户如果在特定系统环境下配置,可能需要处理类似依赖库的问题,比如安装libdrm-dev或其他相关包。 最后,生成相关问题时要围绕DRM配置、设备树修改、调试方法以及常见问题处理展开,帮助用户进一步深入理解或解决实际应用中的困难。</think>关于RK3399芯片的DRM与MIPI接口配置,以下是关键信息整理: ### 一、DRM子系统基础 1. RK3399的显示控制通过Linux内核的**DRM/KMS子系统**实现,其核心组件包括: - **CRTC**:负责时序生成(如$H/V_{sync}$信号)和图层合成[^1] - **Encoder**:将数字信号转换为物理接口协议(如MIPI-DSI) - **Connector**:物理接口的抽象(如HDMI、MIPI) 2. MIPI DSI配置需注意: ```dts &dsi { status = "okay"; ports { #address-cells = <1>; #size-cells = <0>; port@1 { reg = <1>; dsi_out: endpoint { remote-endpoint = <&panel_in>; }; }; }; }; ``` ### 二、关键配置步骤 1. **设备树配置**: - 定义MIPI DSI控制器的时钟参数(如$HS_CLK$频率) - 绑定显示面板时序参数(参考各面板规格书) - 配置CRTC与DSI的管道连接 2. **驱动加载验证**: ```shell dmesg | grep drm # 查看驱动加载日志 cat /sys/kernel/debug/dri/0/state # 查看显示管道状态 ``` ### 三、常见问题处理 1. 屏幕无输出时: - 检查`/sys/class/drm/card0-<connector>/status`连接状态 - 使用示波器验证MIPI时钟信号(典型频率范围$80MHz \sim 1GHz$) 2. 编译依赖问题: ```shell sudo apt install libdrm-dev # 解决头文件缺失问题[^3] ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值