使用的是RDK4.0.2
内核版本是2.6.37 PREEMPT
设备里面某个固定的程序(11个线程)启动的时候偶尔会出现挂死的现象。
ps、top等命令会挂住,并且ctrl + c无法退出。通过查看/proc/pid/stat 里面的内容,发现有几个线程状态为state D。
现象有点类似 rachelbythebay.com/.../ 这个网址里面描述的。
通过 echo t > /proc/sysrq-trigger 来把挂死时候的线程状态打印出来了,发现有几个线程挂死在down_read处,有一个挂在down_write处,猜测是读写信号量里面的自旋锁死锁呢?因为用的是抢占式的内核,所以怀疑这个地方有问题。具体的线程状态信息详见附件。