导语
产品交付到客户,不求三连(点赞、在看和转发),没有差评,可以睡得安稳。 有没有碰到难缠的问题呢? 在线业务偶尔中断?不怕,如果系统可以很快自恢复。 业务停止响应?不怕,开发人员半夜可以上线在线调试。 自动重启?是发生Crash异常吗?不是,一切看起来都正常,就是莫名其妙不时重启。大姑娘上轿,头一回。
1群体发作
前方飞鸽传书,有一小运营商那几十台设备多次不明原因重启。 根据描述,诡异的是其它客户那并没有这种现象。也就是说这不是普遍问题。这点多少让开发安心。 出现问题的时候,根据log,发现有时个把小时重启,有时1天重启多次,最长不超过1天半。初看起来毫无规律。这个“团体”得了某种奇怪的“疾病”? 系统是基于OpenWrt。以前如果是Crash引起重启,根据ramoops(后述)机制可以很快得到线索。 但这次初看起来,没有任何线索。下面先介绍一些重启背景知识。
2Warm Boot 种类
对于每次重启,不管是软重启(warm boot)还是硬重启(cold boot,比如掉电),系统都会记录。 记录方式前提是DDR是persistent memory。最直观简单的验证,是在U-boot下先修改一个合法地址的值,reset之后再读回来,看此处的值是否与上次修改后的值一致。如图: 板子在reset后,再次dump(md 命令)此处地址,可以看出值依然是上次修改(mm)的值(deadbeaf),证明此DDR满足此特性。 在此基础上,再在U-boot下打Patch,简单示意图如下: