背景
板卡升级版本后,初始化疑似未执行完,SSH无法连接,可以PING通。
问题定位
通过查看控制台的打印,可以看到,初始化运行到了57一半,就卡住了。
两次控制台输入i(这个命令是我们内部实现的,功能和vxworks的类似,打印一些任务状态),只有PID为1785的程序执行时间在增长,怀疑任务陷入死循环。控制台查看其堆栈:
[<0x2b55ad04>] (pthread_spin_lock + 0x4)
该任务在持续获取一把自旋锁。通过在正常版本查看,优先级为16的实时任务为logTask,负责向控制台输出打印。PID为1782的应该为主线程,负责执行初始化,查看其堆栈如下:
tt 1782
[<0x2b55ad4c>] (pthread_spin_trylock + 0x1c)
value = 2 = 0x2
至此,怀疑logTask任务以及主线程任务,由于SPIN LOCK,互相锁死。查看BSP代码,用到的自旋锁变量为g_LogMsgBuf_sl,查看其内容:
g_LogMsgBuf_sl
g_LogMsgBuf_sl = 0x837078: value = 1 = 0x1
可以看到,其值为1,说明已经有人拿到这把锁。由于两个任务优先级不同,主线程为非实时优先级,logTask为实时优先级,怀疑主线程在拿到锁后,被log