「只能亮一块」钉死了。今天走最熟的那根线HDMI。其它显示口先关掉。现象板子 HDMI 口插了显示器显示器灯亮、提示无信号或者有 logo 没有桌面或者桌面跑在 HDMI 上旁边那块 LVDS/MIPI 玻璃只剩背光。原因几乎总是同一类设备树把不该亮的口也okay了或者该亮的 HDMI 四件套没齐或者你改了 dts 却没刷 resource 分区。HDMI 是真热插拔没插线status就是disconnected。simple-panel永远报connected。把两路一起 okay撒谎的那路会把诚实的 HDMI 挤出主显示或者反过来。分辨率跟显示器 EDID 走不要在板级写死 1024×600。device/board/rk/rk3568_evb/kernel/rk3568-evb-linux.dts现象插着 HDMI 线status 是 disconnectedhdc shell ls /sys/class/drm/ hdc shell cat /sys/class/drm/card0-HDMI-A-1/status原因线插到 USB Host 不是 HDMI 母座显示器输入源没切插头没插紧hdmiokay 但hdmi_in_vp0/route_hdmi仍 disabledVOP 没把 VP 接到 HDMI。代码hdmi { status okay; }; hdmi_in_vp0 { status okay; }; hdmi_in_vp1 { status disabled; }; route_hdmi { status okay; connect vp0_out_hdmi; };VP0 出 HDMI。connect写成vp1_out_hdmi却打开in_vp0扫描在一边、连接器在另一边黑屏。hdc shell cat /proc/partitions hdc shell cat /sys/class/drm/card0-HDMI-A-1/status hdc shell cat /sys/class/drm/card0-HDMI-A-1/enabled hdc shell cat /sys/class/drm/card0-HDMI-A-1/modes hdc shell mount -t debugfs none /sys/kernel/debug 2/dev/null hdc shell cat /sys/kernel/debug/dri/0/summary期望connectedmodes里有显示器给的模式常见 1920x1080。拔线再读必须变成disconnected。不变你看的不是真 HDMI。现象HDMI 有桌面旁边 MIPI/LVDS 只有背光原因composer 同一时刻只喂一路。你为了先看 HDMI 把hdmi打开测完忘了关。Linux Weston 可以双 output开源鸿蒙不行。代码开 HDMI 时其余全关hdmi { status okay; }; hdmi_in_vp0 { status okay; }; route_hdmi { connect vp0_out_hdmi; status okay; }; video_phy0 { status disabled; }; lvds { status disabled; }; lvds_in_vp2 { status disabled; }; route_lvds { status disabled; }; lvds_panel { status disabled; }; rgb { status disabled; }; rgb_in_vp2 { status disabled; }; route_rgb { status disabled; }; tft_lcd_panel { status disabled; }; edp { status disabled; }; edp_in_vp0 { status disabled; }; edp_panel { status disabled; }; dsi1 { status disabled; }; dsi1_in_vp0 { status disabled; }; dsi1_in_vp1 { status disabled; }; route_dsi1 { status disabled; }; dsi0 { status disabled; }; dsi0_panel { compatible simple-panel-dsi-disabled; };DSI panel 节点不能删。HDFof_find_compatible_node不一定跳过 statusdisabled抓错之后panelManager空/dev/dri/card0可能不建。刷resource p4 boot_linux p5路径/dev/block/。SD 启动也写mmcblk0p4。hdc shell dd if/data/resource.img of/dev/block/mmcblk1p4 bs4M convfsync hdc shell dd if/data/boot_linux.img of/dev/block/mmcblk1p5 bs4M convfsync hdc shell dd if/data/resource.img of/dev/block/mmcblk0p4 bs4M convfsync现象黑屏串口有字三种黑不要混[drm] Initialized从不出现 → 内核 DRM 没起来查四件套。有 Initialized、有 logo、无桌面 → RenderService / SystemUI / 电源超时。hidumper -s RenderService约 22 秒后黑用 wakeup。HDMI disconnected → 回到第一节。failed to init overlay plane经常是红鲱鱼。modes为空是 EDID 没读到换线、直插、显示器开到明确 HDMI 源。不要在 dts 里编假 timing。hdc shell dmesg | grep -iE drm|hdmi|edid|vop hdc shell ls /dev/dri/ hdc shell pidof render_service不要在 DTS 里写死 1024×600LVDS 那块玻璃没有 EDID时序必须写在 dts 里。HDMI 显示器有 EDID写死是在剥夺它。错误示范hdmi { status okay; /* 不要这样做 */ rockchip,default-mode 1024 600; }; hdmi_panel: hdmi-fake-panel { compatible simple-panel; display-timings { native-mode hdmi_timing0; hdmi_timing0: timing0 { clock-frequency 51200000; hactive 1024; vactive 600; }; }; };第二段尤其坏你给 HDMI 造了一个 simple-panel。HDMI 连接器立刻染上 LVDS 那种「永远 connected」的病热插拔失效拔线仍 connectedEDID 被忽略。桌面分辨率锁在 1024×6001080p 显示器四周黑边或者直接不认。正确的 HDMI 就是四行 status 加一个 connect。分辨率出现在hdc shell cat /sys/class/drm/card0-HDMI-A-1/modes hdc shell cat /sys/class/drm/card0-HDMI-A-1/enabled hdc shell cat /sys/class/drm/card0-HDMI-A-1/statusmodes里常见1920x1080 1280x720 1024x768哪一档被选中看 debugfs summary 里 VP0 的 mode。插不同显示器这个列表会变。变了说明 EDID 通路是通的。列表永远只有 1024x600回头查 dts 是不是被写死或者 DDC 没出来、驱动在用一份兜底模式。DDC 是一组 I2C。显示器不给 EDID线太差、插座虚接、显示器还没上电连接器可能 connected 但 modes 空。HPD 高、DDC 失败表现就是有 connected、没模式、黑屏。换线、换口、让显示器先亮再插比改 dts 快。官方连线图从 SoC 到插座经过 PHY、HPD、DDC。RK3568 的 HDMI 控制器把这三样包在hdmi节点里板级 dts 通常只改status和接到哪个 Video Port。你要是在板级再抄一份时钟就是在和显示器的 EDID 抢权。真正生效的还是 resource 里那份 dtb你从 LVDS 切到 HDMI只刷了 p5U-Boot 仍加载 p4 的rk-kernel.dtb板上继续出 LVDS 时序。HDMI 线插着summary 仍是LVDS-1、clk 51200。你会以为 HDMI 驱动坏了。生效的 DTB 是 resource 分区 p4 的rk-kernel.dtb不是 boot_linux 里的toybrick.dtb。改hdmi必须刷 p4。稳妥起见 p5 也刷内核和 dtb 成套。SD 是mmcblk1eMMC 是mmcblk0。/dev/block/by-name/resource永远指 eMMC。U-Boot 常从 eMMC 取 resource。从 SD 启动也要刷mmcblk0p4。dd 必须写/dev/block/mmcblkXpY。hdc shell cat /proc/partitions hdc shell ls -l /dev/block/mmcblk0p4 /dev/block/mmcblk1p4 /dev/block/mmcblk0p5 /dev/block/mmcblk1p5 hdc file send resource.img /data/resource.img hdc file send boot_linux.img /data/boot_linux.img hdc shell dd if/data/resource.img of/dev/block/mmcblk1p4 bs4M convfsync hdc shell dd if/data/resource.img of/dev/block/mmcblk0p4 bs4M convfsync hdc shell dd if/data/boot_linux.img of/dev/block/mmcblk1p5 bs4M convfsync写完看返回。records in/out之后必须是块设备上的写入。若ls -l /dev/mmcblk1p4显示普通文件而不是brw你已经踩进假成功。删掉那个文件改路径重来。板上hdc shell cat /proc/device-tree/lvds-panel/status; echo hdc shell find /proc/device-tree -iname *hdmi* hdc shell cat /proc/device-tree/hdmife0a0000/status; echolvds-panel期望disabled。HDMI 控制器期望okay。对不上就是刷错分区或刷错介质别去拧显示器菜单。board 目录经常不在内核 DEPS 里。改 dts 之后删 checkpoint让build_kernel.sh把rk3568-evb-linux.dts拷进内核树编 dtb打 resource。rm -rf out/kernel/checkpoint rm -f out/kernel/src_tmp/linux-5.10/resource.img rm -f out/rk3568_evb/packages/phone/images/resource.img ./build.sh --product-name rk3568_evb --ccache只换显示、system / vendor 已经能进桌面时刷 resource boot_linux 就够。vendor 缺 GPU 库那是另一张镜像的事缺的话桌面同样没有render_service退 255。编完在主机确认 dtbfind out/kernel -name *rk3568-evb*.dtb -o -name rk-kernel.dtb | head dtc -I dtb -O dts -o /tmp/now.dts 那份.dtb grep -n hdmi\|lvds\|simple-panel-dsi /tmp/now.dts | head -40hdmi合并后的节点 status 是 okaylvds-panel是 disabledDSI panel 的 compatible 带disabled这个后缀。三件都在再刷。缺一件编的是旧树或 dts 没被拷进去。线、口、输入源软件全对时的黑屏软件栈查完仍是黑的按硬件从近到远排。USB Host 口和 HDMI 口长得不像但操作台上线多了会插错。Host 口给 U 盘、USB 相机、USB 网卡。HDMI 插座在板边对的是显示器或电视机。插到 HostHPD 不会跳status停在disconnected。这不是驱动。插头没插紧。HDMI 靠里面那排弹片松一下 HPD 就掉。status在 connected / disconnected 之间抖modes 时有时无。按住再读一次 sysfs。抖就换线。显示器输入源。很多屏后面有 HDMI1 / HDMI2 / DP / 自动。停在自动以外的错误源板子已经 connected人眼仍是「无信号」。把菜单切到对应那一个 HDMI。这一条不进 dmesg。显示器还没从待机醒。HPD 有的屏在待机时仍拉高有的不拉。你看到 disconnected先按显示器电源。分辨率超出显示器能力。EDID 若被读残驱动可能选一档屏不认的 mode。modes里只留 1920x1080 试用一根短线、一台 1080p 屏做对照。不要在 dts 里写死兜底时序先把 DDC 修好。拔掉线能变成 disconnected还有一个诊断用途。你怀疑当前主显示是不是 HDMI拔线summary 里 VP0 应该停status 变 disconnected。若拔线之后 status 仍是 connected你看的那个card0-HDMI-A-1不是真 HDMI或者 dtb 根本不是你以为的那份。内核没起来也会被说成「HDMI 黑屏」DDR 识别错、loader 版本和颗粒不匹配U-Boot 停在内存训练或者内核没出[drm] Initialized。屏上可能有 U-Boot 的字也可能全黑。你在 dts 里改 HDMI 没有意义。串口必须开着。波特率 1500000 8N1。没看到内核的Linux version不要谈显示。没看到[drm] Initialized rockchip不要谈 HDMI 连接器。/dev/dri/card0不出现和 HDMI 插头无关。回到四件套、HDF 有没有误抓 DSI panel、vendor 里有没有把 DRM 编进内核。CONFIG_DRM_ROCKCHIP、CONFIG_DRM_DW_HDMI这类开关若被关掉连接器节点写得再漂亮也不会有card0-HDMI-A-1。那是内核配置不是 dts status。新编的 Image 里要能grep -a到 HDMI 相关字符串再刷。CEC 脚、HPD 脚若被别的节点占用表现为永远 disconnected。先确认 HDMI 节点活着再去对 pinctrlhdc shell cat /sys/class/drm/card0/device/uevent hdc shell ls /sys/class/drm/uevent里能看到 DRM 驱动名card0-HDMI-A-1必须出现。没有这个连接器是hdmi没 probe不是显示器的事。电源超时桌面起来过然后黑HDMI 显示器自带背光不会踩 LVDS 那种 37 秒 regulator cleanup。它会踩电源管理。首启 SystemUI、Launcher、一堆 hap 在装没人碰鼠标。SuspendController 的 timeout 源走到发 display offDRM blank。串口有KeventFbNotifierFn: blank4 receive display off event DevmgrServicePowerStateChange: suspendhdc 还活着pidof render_service还有号。这不是 HDMI 没配好。hdc shell power-shell wakeup屏醒了显示栈没问题。真正读的配置在/system/etc/power_config/power_suspend.json。往 vendor 放一份盖不住。显示总论把这一层归在「卡 logo 的变种」。HDMI 上它更像「亮过又灭」。不要为此去改hdmi的 status。那是给连接器的不是给空白计时器的。验收命令从 partitions 开始hdc shell cat /proc/partitions hdc shell mount | grep on / hdc shell ls -l /dev/block/mmcblk0p4 /dev/block/mmcblk1p4 hdc shell ls -l /dev/block/by-name/resource /dev/block/by-name/boot_linux hdc shell dmesg | grep -iE \\[drm\\] Initialized|dw-hdmi|rockchip-drm|hdmi hdc shell ls -l /dev/dri/ hdc shell cat /sys/class/drm/card0/device/uevent hdc shell ls /sys/class/drm/ hdc shell cat /sys/class/drm/card0-HDMI-A-1/status hdc shell cat /sys/class/drm/card0-HDMI-A-1/enabled hdc shell cat /sys/class/drm/card0-HDMI-A-1/modes hdc shell mount -t debugfs none /sys/kernel/debug hdc shell cat /sys/kernel/debug/dri/0/summary hdc shell cat /proc/device-tree/lvds-panel/status; echo hdc shell find /proc/device-tree -iname *hdmi* hdc shell pidof render_service composer_host hdc shell hidumper -s RenderService | head -80插上显示器之后合格大致是card0-HDMI-A-1/status connected card0-HDMI-A-1/enabled enabled card0-HDMI-A-1/modes 至少一行常见 1920x1080 summary VP0 ACTIVEconnector HDMI-A-1 lvds-panel/status disabledenabled是disabled但status是connected说明连接器在、没被选成主显示。回头查还有没有 simple-panel 抢在前面或者 composer 没起来。status是disconnected先动手换口、换线、开显示器、确认不是 Host 口。再读 dts 的hdmi。最后才怀疑 HPD 脚被占用。分辨率不要用尺子去量是不是 1024×600。HDMI 这篇通过的标志是「跟这台显示器的 EDID 一致」不是「跟 LVDS 玻璃一致」。和 LVDS 对打才能记住 HDMI 的脾气同一块板同一份内核换 dts 开关就能在两种连接器之间切。建议真的切一次。切到 HDMI四件套打开 VP0LVDS / RGB / DSI / eDP 全关DSI panel 改 compatible。刷 p4 和 p5eMMC 的 p4 也刷。插显示器。读status、modes、summary。拔线status 必须变成 disconnected。再切回 LVDS按 LVDS 那篇把 1024×600、JEIDA、video_phy0、lvds_in_vp2、route_lvds打开把hdmi四件套关掉。刷同一对分区。U-Boot 应打出type: LVDS0 for VP2。此时插不插 HDMI 线都不该再出现HDMI-A-1被选中。你可以插着线card0-HDMI-A-1若还在status 即使 connectedsummary 的 ACTIVE 也必须是 LVDS-1。若 HDMI 又把桌面抢走就是hdmi没关干净。这两次切换用的是同一根原则。HDMI 贡献的额外一课是只有它能用拔线证明自己。LVDS 不能。谁先学会信 HPD谁就少信 simple-panel 的 connected。窗口取向显示器是 1920×1080 横的窗口服务若仍按竖屏 720×1280 申请桌面会在 HDMI 上竖着占一块。那是窗口取向不是 HDMI 时序。触摸跟主显示走。外接 HDMI 常常配 USB 鼠标键鼠插 Host 口HDMI 线插 HDMI 口。现场一条最短路径显示器、HDMI 线、板子、串口、hdc五样都在桌上。dts 已按本文打开 HDMI、关掉其余。先串口。上电看到Linux version看到[drm] Initialized。看不到停不要拧显示器。再 hdc。cat /proc/partitions。确认这次启动介质。把 resource、boot_linux 按/dev/block/写到 p4、p5eMMC 的 p4 也写。reboot。起来后读card0-HDMI-A-1/status。disconnected换口换线换输入源再读。connected读modes读 summary。VP0 上是 HDMI-A-1桌面就该在这台显示器上。桌面不在pidof render_service为空去查 so 和 hilog不是 HDMI。pid 在、屏黑power-shell wakeup。醒了就是超时。不醒summary 是否其实在扫 LVDS-1——回到四选一。这条路径里没有「调 HDMI 时序」这一步。需要时序的是 LVDS、RGB、MIPI、eDP 那些没有 EDID 或不信任 EDID 的口。现象对照现象原因先做什么card0-HDMI-A-1 不存在hdmi disabled 或 DRM 没起来ls drmdmesgdisconnected线插着HPD/线/源/route 没齐换线换口查四件套connectedmodes 空EDID 失败换线、先开显示器再插HDMI 有桌面MIPI 只背光两路 okay关 HDMI 再测 MIPIconnected 但 enableddisabled主显示不是 HDMIsummary关 simple-panel改 dts 无效没刷 p4dd 路径错resource /dev/block/有 logo 无桌面RS/SystemUI/电源hidumperwakeup画面 1024×600 居中小块dts 写死了 LVDS 时序删 panel timing跟 EDID拔线实验是 HDMI 独有的教具。status必须跟着插头走。LVDS-1、DPI-1 做不到这件事它们永远 connected。所以这一路既是投屏口也是用来验证「你刷进去的 dtb 是不是真 HDMI 那份」的探针。hdc shell cat /sys/class/drm/card0-HDMI-A-1/status # 拔线再读一次必须变成 disconnected hdc shell cat /sys/class/drm/card0-HDMI-A-1/edid | xxd | head hdc shell cat /sys/kernel/debug/dri/0/summary hdc shell find /proc/device-tree -iname *hdmi* | headedid 全零DDC 没通换线、去掉转接头。summary 的 ACTIVE 在 LVDS-1dts 里 HDMI 可能 okay 了主显示仍被 simple-panel 抢走回到四选一那一组 disabled。/proc/device-tree里 hdmi 仍是 disabledp4 没刷上或刷到了 SD 的 p4、U-Boot 读的是 eMMC。不要给 HDMI 造一颗simple-panel。不要把 1024×600 写进 HDMI 节点。契约是四件套、别人全关、HPD 真的连上、EDID 能读、resource 里的 dtb 是新的。 | 拔线仍 connected | 造了 simple-panel或看错连接器 | 不要给 HDMI 加 fake panel | |[drm] Initialized没有 | 内核没起来或 DRM 没编进 | 串口从 U-Boot 读起 | |render_service退 255 | vendor 缺 mali / composer so | 产品 config与 HDMI 无关 | | Cluster plane init failed | 能出桌面的旧包是否也有 | 红鲱鱼 |「另一路 simple-panel 仍 okay」值得单独再写一次为什么。HDMI 自己不会永远 connected。它被抢走是因为列表里站着一个更早注册、永远 connected 的 LVDS-1 或 DPI-1 或 DSI-1。你在 HDMI 连接器上看一切正常插上 connected拔掉 disconnected。桌面却不来。summary 会出卖真相ACTIVE 的 VP 挂的不是 HDMI-A-1。修法不是给 HDMI 提高优先级。开源鸿蒙的 composer 没有「我更喜欢 HDMI」这种旋钮。修法是把撒谎的那路 disabled让列表里只剩 HDMI。四选一在 HDMI 这篇里不是口号是让热插拔的诚实生效。现象改了 dtsHDMI 还是不出hdmi已经 okayLVDS 已经 disabled。重启以后/proc/device-tree里 LVDS 还是 okay。原因生效的 DTB 在 resource 分区 p4 的rk-kernel.dtb。U-Boot 取出这份树再启动内核。boot_linux那个 ext2 里也有一份 dtb名字常叫toybrick.dtb你刷 p5 换的是它U-Boot 不读。/dev/block/by-name/resource永远指向 eMMC也就是mmcblk0p4。从 SD 启动只刷mmcblk1p4U-Boot 仍可能从 eMMC 取旧 resource。SD 启动也要刷mmcblk0p4。dd 写成/dev/mmcblk1p4。这个路径常常不是块设备工具在/dev下新建普通文件exit 0。分区里的旧图纹丝不动。必须/dev/block/mmcblkXpY。内核 GN 不盯 board 目录。改了rk3568-evb-linux.dtsninja 认为内核没变out/里躺着昨天的resource.img。代码rm -rf out/kernel/checkpoint rm -f out/rk3568_evb/packages/phone/images/resource.img ./build.sh --product-name rk3568_evb --ccache hdc shell cat /proc/partitions hdc shell ls -l /dev/block/mmcblk0p4 /dev/block/mmcblk1p4 hdc file send resource.img /data/resource.img hdc file send boot_linux.img /data/boot_linux.img hdc shell dd if/data/resource.img of/dev/block/mmcblk1p4 bs4M convfsync hdc shell dd if/data/resource.img of/dev/block/mmcblk0p4 bs4M convfsync hdc shell dd if/data/boot_linux.img of/dev/block/mmcblk1p5 bs4M convfsync主机确认dtc -I dtb -O dts -o /tmp/now.dts rk-kernel.dtb grep -n hdmi\|lvds-panel\|simple-panel-dsi /tmp/now.dts | head -40hdmi合并后 okaylvds-paneldisabledDSI panel 的 compatible 带disabled后缀。三件都在再刷。板上hdc shell cat /proc/device-tree/lvds-panel/status; echo hdc shell find /proc/device-tree -iname *hdmi* | headlvds-panel 仍是 okay新树没生效不要拧显示器。现象modes 是空的status 却是 connected控制器认为插上了EDID 没读到。没有可用模式composer 没法选分辨率。屏上「无信号」和 disconnected 看起来一样sysfs 不一样。原因DDC 是一组 I2C走 HDMI 插座里那对 DDC 脚。线太长、转接头只接了 TMDS 没接 DDC、显示器还没上电都会让 EDID 读空。HPD 可以先跳变DDC 后失败。错误修法是在 dts 里给 HDMI 编一套 1024×600 的display-timings甚至造一颗simple-panel挂上去。那是 LVDS 的做法。HDMI 会跟真实显示器打架热插拔失效拔线仍 connected1080p 屏四周黑边。代码hdc shell cat /sys/class/drm/card0-HDMI-A-1/status hdc shell cat /sys/class/drm/card0-HDMI-A-1/modes hdc shell cat /sys/class/drm/card0-HDMI-A-1/edid | xxd | head hdc shell dmesg | grep -iE edid|hdmi|ddcedid 全零或读失败先换线、直插不走转接、显示器开到明确的 HDMI 源。短线、1080p 屏做对照。读到一串非零modes就该出现 1920x1080 一类。不要写/* 错误示范 */ hdmi_fake: hdmi-fake-panel { compatible simple-panel; display-timings { native-mode hdmi_timing0; hdmi_timing0: timing0 { clock-frequency 51200000; hactive 1024; vactive 600; }; }; };正确的 HDMI 就是控制器 in_vp route。分辨率出现在modes文件里随显示器变。永远只有 1024x600回头查 dts 是不是被写死。现象画面是 1024×600 小块四周黑modes能把两件事分开。列表里只有1024x600dts 写死了或 EDID 失败后走了兜底。列表里有1920x1080summary 也是 1920x1080画面仍是竖条窗口取向不是 HDMI。删掉 HDMI 上任何display-timings、任何simple-panel。让 EDID 说话。窗口取向在板级显示策略里写成横屏。那不是hdmi的字段别在 porch 上找竖条。外接 HDMI 常用 USB 键鼠插 Host 口不是 OTG。OTG 一插板子角色会变hdc 掉、画面也像「没了」。触摸跟主显示走。不要 HDMI 出桌面、LVDS 玻璃还当第二块触摸板——composer 不会克隆。现象亮过桌面二三十秒后黑HDMI 显示器自带背光不会踩 LVDS 那种 37 秒 regulator cleanup。它会踩电源管理。首启在装 hap没人点SuspendController 的 timeout 源走到DRM blank。KeventFbNotifierFn: blank4 receive display off eventhdc shell power-shell wakeup hdc shell pidof render_service屏醒了显示栈没问题。真正读的配置在/system/etc/power_config/power_suspend.json。往 vendor 放一份盖不住。不要为此去改hdmi的 status。render_service退 255 是另一件事。查 vendor 的 mali / composer so。板级config.json没声明rockchip_products一类部件so 编出来了也不会打进vendor.img。刷一百次 p4 也补不回来要重打 vendor。failed to init overlay plane Cluster0-win0在能出桌面和黑屏的日志里都出现过当红鲱鱼。串口没有Linux version是 loader / DDR不是 HDMI。波特率 1500000 8N1。停在内存训练、停在Cannot find partition先把启动做完。从 LVDS 切到 HDMI一次做完打开device/board/rk/rk3568_evb/kernel/rk3568-evb-linux.dts按本文打开 HDMI 四件套关掉 LVDS / RGB / DSI / eDPDSI compatible 改名video_phy0disabled。删 checkpoint重打 resource 和 boot_linux。hdc shell cat /proc/partitions hdc shell dd if/data/resource.img of/dev/block/mmcblk1p4 bs4M convfsync hdc shell dd if/data/boot_linux.img of/dev/block/mmcblk1p5 bs4M convfsync hdc shell dd if/data/resource.img of/dev/block/mmcblk0p4 bs4M convfsync hdc shell reboot串口看到Linux version看到[drm] Initialized。插上显示器hdc shell cat /sys/class/drm/card0-HDMI-A-1/status hdc shell cat /sys/class/drm/card0-HDMI-A-1/modes hdc shell mount -t debugfs none /sys/kernel/debug 2/dev/null hdc shell cat /sys/kernel/debug/dri/0/summary hdc shell cat /proc/device-tree/lvds-panel/status; echostatusconnectedmodes 非空summary 的 VP0 是 HDMI-A-1lvds-panel 是 disabled。拔线statusdisconnected。这四条齐了内核侧过关。桌面不在走 RenderService / 签名 / 超时不是时序。再切回 LVDS按 LVDS 那篇把 1024×600、JEIDA、video_phy0、lvds_in_vp2、route_lvds打开把hdmi四件套关掉。刷同一对分区。U-Boot 应打出type: LVDS0 for VP2。此时插着 HDMI 线summary 的 ACTIVE 必须是 LVDS-1。若 HDMI 又把桌面抢走就是hdmi没关干净。两次切换用的是同一根原则。HDMI 贡献的额外一课只有它能用拔线证明自己。验收命令从 partitions 开始hdc shell cat /proc/partitions hdc shell mount | grep on / hdc shell ls -l /dev/block/mmcblk0p4 /dev/block/mmcblk1p4 hdc shell ls -l /dev/block/by-name/resource /dev/block/by-name/boot_linux hdc shell dmesg | grep -iE \\[drm\\] Initialized|dw-hdmi|rockchip-drm|hdmi hdc shell ls -l /dev/dri/ hdc shell cat /sys/class/drm/card0/device/uevent hdc shell ls /sys/class/drm/ hdc shell cat /sys/class/drm/card0-HDMI-A-1/status hdc shell cat /sys/class/drm/card0-HDMI-A-1/enabled hdc shell cat /sys/class/drm/card0-HDMI-A-1/modes hdc shell mount -t debugfs none /sys/kernel/debug hdc shell cat /sys/kernel/debug/dri/0/summary hdc shell pidof render_service composer_host hdc shell hidumper -s RenderService | head -80 hdc shell power-shell wakeup合格大致是card0-HDMI-A-1/status connected card0-HDMI-A-1/enabled enabled card0-HDMI-A-1/modes 至少一行常见 1920x1080 summary VP0 ACTIVEconnector HDMI-A-1 lvds-panel/status disabled 拔线后 status disconnected分辨率不要用尺子去量是不是 1024×600。HDMI 通过的标志是「跟这台显示器的 EDID 一致」不是「跟 LVDS 玻璃一致」。HDMI 这一路没有 DCS 初始化没有 JEIDA 总线格式没有 51.2 MHz 写死。契约是四件套 okay、别人 disabled、HPD 真的连上、EDID 能读、resource 里的 dtb 是新的。玻璃屏那几路把契约换成 simple-panel 和时序表。LVDS 那篇会把 51.2 MHz 钉死。对照着看HDMI 为什么不写 timing 会更清楚LVDS 没 EDID不写就没模式HDMI 有 EDID写了就是在抢权。DDC 是一组 I2C不是神秘寄存器HDMI 插座里除了 TMDS还有一对脚跑 I2C就是 DDC。显示器把 EDID 放在地址0x50。驱动读到一串二进制解析出modes。线只接了影像没接 DDC劣质转接头常见HPD 可以高status是 connectedmodes是空。看起来像驱动坏了其实是显示器没机会开口。hdc shell cat /sys/class/drm/card0-HDMI-A-1/edid | xxd | head -8 hdc shell dmesg | grep -iE edid|ddc|i2cedid 开头常见00 ff ff ff ff ff ff 00这是 EDID 头。全零或读失败换线、去掉转接头、显示器先亮再插。不要在 dts 里补一份假 timing 去「救」它。那是 LVDS 的契约HDMI 会跟真实 1080p 打架。插不同显示器modes列表应当变。变了DDC 通。永远只有 1024x600回头查 dts 是不是被写死。系列第 17 篇 · 芯片瑞芯微 RK3568 · OpenHarmony 4.1API 11 · Linux 5.10