- 积分
- 36
贡献200
飞刀67 FD
注册时间2016-11-14
在线时间8 小时
|
楼主 |
发表于 2017-1-16 16:27:04
|
显示全部楼层
该问题已经解决!由于Can驱动的问题,导致抛出的一个空指针异常的oops信息。
Linux3.0.1驱动中/drivers/net/can/mcp251x.c
mcp251x_open()函数中
先进行中断函数申请注册
request_irq(spi->irq, mcp251x_can_irq, IRQF_DISABLED | IRQF_TRIGGER_LOW , DEVICE_NAME, priv);
然后再进行工作队列的初始化:
priv->wq = create_freezable_workqueue("mcp251x_wq");
INIT_WORK(&priv->irq_work,can_irq_work);
此时如果在申请中断完成后,马上来了一个中断,就会跳到中断处理函数里面执行硬中断(而中断处理函数里面恰恰有对工作队列的操作,此时工作队列还没有初始化完成,就会出现工作队列空指针)
解决办法:
先初始化工作队列再申请中断函数。
亲测已经不会出现该问题了。 |
|