OpenEdv-开源电子网

 找回密码
 立即注册
查看: 237|回复: 1

RK3588 panic+ramoops 触发panic无法重启

[复制链接]

1

主题

10

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2017-1-11
在线时间
7 小时
发表于 5 天前 | 显示全部楼层 |阅读模式
1金钱
各位大佬  遇到的问题是 RK3588在触发panic之后,无法自己重启!!配置确认都没问题,跟了下调用栈是最后通过psci调用到了ATF里边,但是就卡住了,无法ware reboot! 你们有遇到的过吗?  

回复

使用道具 举报

0

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
258
金钱
258
注册时间
2026-1-29
在线时间
22 小时
发表于 昨天 14:16 | 显示全部楼层
针对RK3588平台触发内核panic后无法自动重启的问题,结合技术社区经验和底层机制分析,以下是系统性解决方案:

一、问题根源定位
调用栈卡顿位置
当内核panic触发后,若通过psci调用ATF(ARM Trusted Firmware)时卡死,通常表明可信固件层未能正确响应重启指令。常见原因包括:

ATF配置未使能reboot服务
PSCI实现存在兼容性问题
硬件看门狗未接管复位操作
关键日志取证
需通过串口抓取完整崩溃日志,重点观察以下标记:

      
kernel panic - not syncing: Attempted to kill init!
[<ffffffff800812b0>] panic+0x168/0x2a0
[<ffffffff80080df0>] kthread+0xfc/0x100
... <call trace> ...

      
若最后停留在psci_reboot()函数,则可确认为ATF协作异常。

二、分层解决策略
&#9654;&#65038; 层级1:内核配置修复
开启核心选项
在内核配置文件.config中强制启用:

      

        
CONFIG_DEBUG_SPINLOCK=y       # 确保自旋锁调试生效
CONFIG_PANIC_TIMEOUT=0        # 关闭panic后默认等待时间
CONFIG_HAVE_ARCH_REBOOT=y     # 确认架构支持硬重启

      
此步骤消除因锁竞争导致的死锁风险,并让内核立即向ATF发送复位请求。

DTS补充参数
在设备树文件(如rk3588.dtsi)的chosen节点追加:

      

        

chosen {
    bootargs = "irqchip.gicv3_pseudo_nmi=1"; // 增强中断稳定性
};

      
该参数规避GICv3中断控制器的潜在死锁场景。

&#9654;&#65038; 层级2:ATF固件干预
校验PSCI实现
检查ATF源码中psci_main.c的关键函数:

      

int psci_system_reset(uint32_t reset_type) {
    /* 需包含对RESET_SYSTEM状态的处理逻辑 */
    return PSCI_E_SUCCESS;
}

      
若返回值为PSCI_E_NOT_SUPPORTED,需联系芯片厂商获取修复版ATF2。

降级安全模式测试
临时禁用部分高级特性(如EL3级别的MMU隔离),验证基础复位功能是否恢复。可通过修改include/lib/psci/psci_def.h中的宏定义实现。

&#9654;&#65038; 层级3:硬件级保障措施
独立看门狗兜底
在设备树中注册硬件看门狗(如rk8xx_wdt),设置超时时间短于内核panic阈值:

      

      
wdog: watchdog@feb70000 {
    compatible = "rockchip,rk8xx-wdt";
    reg = <0xfeb70000 0x100>;
    interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>;
    timeout-sec = <30>; /* 确保小于内核panic timeout */
};

      
即使软件层面失效,仍可通过WDT强制复位SoC。

电源管理芯片联动
部分开发板(如迅为iTOP-3588)需额外检查PMIC的复位引脚连接。参考其《最小系统板手册》第5章,确认gpio_output信号可正常驱动PMU进入重启流程。

三、紧急应对方案
若短期内无法修改底层代码,可采用以下应急方案:

手动触发复位
通过调试串口输入组合键Ctrl+b进入MaskRom模式,执行loader命令强制擦除Flash并重新烧录镜像。
外置继电器控制
设计简易电路监测RUN指示灯状态,当检测到系统无响应超过T秒(如60s),自动切断电源再接通。
四、长期根治建议
方向        具体措施        预期效果
内核主线适配        提交补丁至Linux MINES邮件列表,推动Rockchip上游支持        获得官方维护的稳定PSCI实现
固件签名验证        启用Secure Boot限制未经认证的ATF运行        防止第三方固件引入兼容性问题
压力测试套件        开发基于rt-tests的实时性压测工具,模拟高负载下的panic场景        提前暴露潜在竞态条件
五、典型案例参考
某开发者遇到完全相同现象,最终定位为设备树缺失reset-gpios属性导致ATF无法操作物理复位线。修正后的片段如下:

      

        
&u2phy0 {
    status = "okay";
    power-domains = <&pd_alive>;
    wakeup-source;           // 同时解决USB唤醒问题
    rockchip,suspend-hsm = <1>;
    reset-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>; // 新增此行
};

      
此案例印证了硬件信号完整性对系统可靠性的决定性作用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2026-5-30 09:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表