流程走到panic()就里死(异常重启)不远了,关键的信息已输出到kernel log。那么panic()做了什么呢?
panic()流程
panic()有标志性的log输出,大致如下:
因此我们也可以通过搜索关键字Kernel panic查找是否有panic发生。
panic通知链
panic()会调用栈通知链上的回调函数同时感兴趣的模块,比如我们的aee注册了回调函数,用于保存kernel log/mini dump等关键信息,并将其保存到emmc的expdb分区,等等重启后将其回读并保存成KE db。
expdb
重启过程DRAM会丢失,因此信息只能保存在flash上了,在分区表里有一项就是expdb了:
流程大致如下(版本不停演进,可能有很大变化,仅供参考):
重启后,aee将回读aeedb分区资料并转化为KE db。