背景:
自研硬件,使用cat /sys/class/thermal/thermal_zone0/temp查看温度,显示/system/bin/sh: cat: temp: Invalid argumen。
解决过程:
1. 先使能 &tsadc,温度采集的问题得以解决。但是会不定时在内核启动过程中死机。
2.因为加了温度采集出的问题,猜测是启动阶段采集温度没稳定,可能温度值异常导致保护,于是尝试将dts中
tsadc{pinctrl-1 = <&tsadc_shut>;} //高温保护 注释掉
thermal_zones {type = "critical";} //critical紧急处理 改为passive被动处理
不生效。
3. 在驱动文件 drivers/thermal/rockchip_thermal.c中的rk_tsadcv2_code_to_temp函数增加打印,发现挂机前温度值已经采集正常。并确认了硬件电路。tsadc_shut温度保护会导致复位,不是挂住
4.考虑是增加了温度,导致一些依赖温度的驱动开始运行了,于是尝试关闭一些外设做测试,最终定位到是关闭了rk806电源模块的i2c0情况好转。再次研究了硬件电路,发现I2C0确实有问题,多连了一个I2C设备,将多的设备断开后,启动即恢复正常了。
5. 启动正常后,还是偶现Oops信息。
CPU: 4 PID: 456 Comm: udevadm Tainted: G D 5.10.110 #34
进了el0_sync异常处理。
6. 后续经过测试发现禁用DMC和DFI后改善,经硬件排查,发现是DDR模式选择电路问题,修改电路后正常。