具体情况:
在mtk6592 kk平台上调试touchpanel驱动中fw upgrade 的时候,发现在mtk6589平台上用的踢狗动作居然不起作用!为此很是疑惑,抓取开机串口log 发现
主要原因:
watch dog thread需要设备驱动加载完成后,才开始init ,故在watch dog thread之前的所有踢狗动作,都没有效果,但是不会报错,LOG如下,平台也没有告知原因阿,我只是等到30s左右,系统因为没有喂狗重启了,才知道watch dog没起作用
watch dog 相关log:
watch dog 超时:
touchpanel 在kernel起来大约4.5秒时候开始probe:
而watch dog thread init在6.5s的时候才姗姗来迟:
解决方法:
和平台技术沟通,他们在92 kk 的平台上watch dog线程在驱动设备加载时候还没有开始执行,其重要的开启watch dog thread函数start_kicker();在设备驱动完成之后才调用的!他建议我在watch dog init 之后开一个线程来单独做fw upgrade ,为此我在如下地方添加线程
watch dog init 之后添加线程:
我的线程code:
总结:
1,平台的kernel加载总是在变化
2,kernel中不能用阻塞式函数影响进程,可以单独开一个线程来完成
3,需要了解kernel整个加载模块的顺序