之前看网上说linux内核自带了死锁检测工具。现在试试使用效果怎么样。感觉确实能够检测到,后面有时间在研究原理把。
死锁检测lockdep实现原理-CSDN博客//这个文章讲了一些检测原理
需要开启如下选项(选项应该是开多了,用最后三个就行)
测试代码
DEFINE_SPINLOCK(lockdep_test);
static struct task_struct *test_task;
int test_thread(void* a)
{
printk(KERN_EMERG "\r\n lock start\n");
spin_lock(&lockdep_test);
return 0;
}
void timer_work(unsigned long data)
{
int err;
if (NULL != test_task)
{
wake_up_process(test_task);
}
return;
}
/* Initializing private device structures, only called from probe */
static int smsc911x_init(struct net_device *dev)
{
.......................
timer.expires=jiffies+msecs_to_jiffies(20000);/*定时时间*/
timer.function=timer_work;/*定时器工作函数*/
init_timer(&timer);/*初始化定时器*/
add_timer(&timer);/*启动定时器*/
printk(KERN_EMERG "\r\n create thread\n");
spin_lock(&lockdep_test);
test_task = kthread_create(test_thread, NULL, "test_task");
kthread_bind(test_task, 1);
............................
}
实际效果
经过实测是在内核线程被调用之前就检测到了
这个图我怀疑是 开启了其他的,导致出现了这个打印