当前位置: 首页 > news >正文

RK3588 启动阶段 `rockchip_panel_probe -19` 真实根因排查与修复实战

适用场景:RK3588 平台,U-Boot 阶段初始化显示面板时,出现Cannot get reset GPIO: ... -19
关键词:U-Boot、Device Tree、GPIO Expander、PCA9535、运行时 DTB、分区提取、问题闭环。


一、问题现象

在启动日志中反复出现:

  • rockchip_panel_probe: Cannot get reset GPIO: rockchip_panel_probe -19

同时显示链路后续会出现多路 VP/plane 的打印,但面板相关初始化并不稳定。

很多同学第一反应会怀疑是:

  1. reset-gpios在 DTS 没配;
  2. defconfig 没生效;
  3. 编译参数不一致。

这些方向都要查,但这次问题的“真正根因”比它们更深一层。


二、先把日志和代码对齐

日志来自 U-Boot 面板驱动:

  • 驱动函数在rockchip_panel_probe()
  • 调用gpio_request_by_name(dev, "reset-gpios", ...)
  • 返回-19(即-ENODEV)后打印该报错

这意味着:

  • 不是简单“字符串打印错误”,而是GPIO provider 设备没有被成功获取/探测

三、第一阶段:排除“DTB 没配”这个误区

仅看源码 DTS 不够,必须看设备运行时实际使用的 DTB。
实操中,建议从设备分区提取resource后解包,拿到运行中的rk-kernel.dtb再分析。

在运行时 DTB 中确认到:

  1. 面板节点存在且status = "okay"
  2. 面板reset-gpios存在;
  3. 该 GPIO 指向的是一个 I2C GPIO 扩展器节点;
  4. 扩展器节点compatible = "nxp,pca9535"status = "okay"
  5. 扩展器父 I2C 控制器也是status = "okay"

结论:

  • 这不是“DTB 缺失 reset-gpios”;
  • 是“读取 reset-gpios 对应 provider 时失败”。

四、第二阶段:为什么看起来配置对了,还是报错?

排查过程中通常会同时遇到三类问题(容易互相干扰):

  1. 构建入口不规范,沿用旧.config,导致产物目标板型错误;
  2. 新增 GPIO Expander 驱动后,SPL 依赖没补齐导致构建失败;
  3. 即使构建通过,运行仍报-19,说明还有代码级问题。

前两类解决后,第三类仍存在,才是这次核心。


五、真正根因:两棵代码树在 pca953x 驱动实现不一致

对比发现:

  • 树 A(可用)中,pca953x_probe()使用chip->chip_addr获取从设备地址;
  • 树 B(报错)中,pca953x_probe()通过gd->fdt_blob + dev_of_offset()读取reg

在本问题对应的运行时 DT 上下文里,后者可能读到无效值(0),直接返回-ENODEV,最终传导为:

  • rockchip_panel_probe ... -19

这就解释了为什么“你看起来配的一样”,实际行为却不一样:

  • 根因不是配置文本本身,而是驱动实现差异 + DT 上下文差异

六、修复方案(最终可落地)

1)配置层(保证能编译并带上 expander 能力)

在目标板 defconfig 中确保:

  • CONFIG_DM_PCA953X=y
  • CONFIG_SPL_I2C_SUPPORT=y
  • CONFIG_DEFAULT_DEVICE_TREE指向目标板 DT

说明:如果启用了 PCA953X 但没有 SPL I2C 支持,常见会在 SPL 链接阶段出现dm_i2c_read/write未定义。

2)驱动层(关键修复)

drivers/gpio/pca953x_gpio.cpca953x_probe()中:

  • 不再通过gd->fdt_blob解析reg
  • 改为使用 DM 已解析的chip->chip_addr
  • 保留无效地址保护(0 直接报错)。

七、验证闭环(建议按此顺序执行)

  1. distclean后重新走目标板 defconfig;
  2. 完整编译并打包 U-Boot;
  3. 确认最终产物 FIT 描述是目标板,而不是默认 EVB;
  4. 刷机后拉取设备uboot_a与本地产物做哈希比对;
  5. 重新抓启动日志,确认rockchip_panel_probe -19是否消失。

八、这次排查的经验总结

  1. “改了 defconfig”不等于“产物一定生效”,要看.config与最终镜像元数据。
  2. 只看源码 DTS 容易误判,必须看运行时 DTB。
  3. -19这种错误很容易被误解成“节点没配”,但也可能是 provider probe 失败。
  4. 同平台不同代码树,最容易踩的是“同名配置、不同驱动实现”。

九、一页结论(可直接贴到问题单)

  • 现象:U-Boot 面板探测 reset GPIO 失败,报-19
  • 误区:不是 DTB 缺少reset-gpios
  • 根因:PCA953x 驱动在某代码树中使用gd->fdt_blobreg,在当前运行 DT 上下文下取值失效,导致 provider 返回-ENODEV
  • 修复:改为chip->chip_addr,并补齐CONFIG_DM_PCA953X + CONFIG_SPL_I2C_SUPPORT
  • 状态:已完成编译与目标板产物验证,刷机后可做日志回归关单。

十、附:建议的团队化排查模板

  1. 先定位日志打印函数与返回码来源。
  2. 同步核对:源码 DTS、打包产物 DTB、设备运行 DTB。
  3. 对比不同代码树同文件实现差异。
  4. 产物层做 FIT 元数据 + 分区哈希双校验。
  5. 形成“配置修复 + 代码修复 + 验证闭环”三段式结论。
http://www.jsqmd.com/news/931321/

相关文章:

  • 2026宝鸡母婴除甲醛公司TOP5深度测评:5大优选甲醛检测治理品牌 - 诚信金利回收
  • YimMenu:GTA5游戏保护与功能增强终极指南
  • Sora 2生成的沙发会“塌陷”?深度解析家具结构物理约束缺失问题及Blender+NeRF联合修复方案
  • Sora 2如何规避A柱盲区可视化误差?——基于ISO 15007-2:2023标准的8类光学畸变校准方案
  • Title: 效率飞跃!用 Qwen3.6-35B 打造专属「万能提示词生成器」,拒绝垃圾输出!
  • 2026年度国产品牌在线DO仪源头厂家权威推荐榜:十大品牌综合实力深度测评与选型指南 - 仪表品牌榜
  • 2026保定母婴除甲醛公司TOP5深度测评:5大优选甲醛检测治理品牌 - 诚信金利回收
  • 2025-2026年全球ai写小说软件测评推荐:五大排行产品专业评测夜写灵感枯竭性价比高注意事项
  • 自制高压探头:从分压原理到安全实践,精准测量高电压
  • Sora 2游戏视频生成商业化临界点已至:3家A轮游戏公司验证——单角色动画生成成本下降67%,但需绕过这4个版权雷区
  • 杭州风火轮2026年5月亲测:音响改装推荐! - GrowthUME
  • 别再恐慌了:一份给工程师的AI漏洞发现与修复务实指南
  • 终极指南:Windows版微信QQ消息防撤回完整解决方案
  • 环境遥感二(水环境遥感)
  • 四款百搭运动休闲男鞋实测排行 适配多场景需求 - 奔跑123
  • 共享储能用户日前用电成本优化Matlab工具包(含双场景算例)
  • 锡林郭勒盟家庭教育指导师正规报名入口:中山优才教育(官方授权机构) - 实时教育培训动态
  • THP--CSK 基于linux服务器的内网域环境渗透
  • 2026保山母婴除甲醛公司TOP5深度测评:5大优选甲醛检测治理品牌 - 诚信金利回收
  • 【Sora 2医学动画制作实战指南】:20年影像科AI工程师首度公开5大不可外传的解剖级帧控技巧
  • Firefox下载Keil工具时OCSP验证失败的解决方案
  • 腾讯云数据库Agent Memory技术解析 - 领先技术探路人
  • 2025-2026年ai写小说软件测评推荐:五大口碑产品评测沉浸创作提速注意事项
  • 轮换对称
  • Java校园二手交易系统完整毕业设计包(JSP+Struts+Hibernate+MySQL)
  • 5分钟掌握Illustrator批量替换:ReplaceItems.jsx完整使用指南
  • 2026年主流机票预订平台性价比实测排行 谁更划算 - 互联网科技品牌测评
  • 辽源家庭教育指导师报名入口、流程、哪家机构好:中山优才教育 - 最新教育培训热点
  • 如何免费永久激活IDM?新手3步搞定完整版解锁指南
  • 亲测:2026年5月台州华声汽车音响改装专业汽车音响实改 - GrowthUME