2 zhengwenbin12 zhengwenbin12 于 2013.06.11 19:50 提问

测试驱动时发生 irq 15: nobody cared 错误

linux 内核版本2.6.10
其中串口中断注册语句如下
if(request_irq(LNXINTNUM(AVALANCHE_UART0_INT), uart_isr, 0, "uart", NULL) != 0)
{
LOG_ERR("request IRQ %d failed.", LNXINTNUM(AVALANCHE_UART0_INT));

return -1;

}
中断处理函数如下图, 只是简单的读取寄存器值,然后丢弃:
static irqreturn_t uart_isr(int isr,void *data, struct pt_regs *reg)
{
int uart_isr_id = p_uart_obj->uart_regs->c_u.int_id;
int uart_line_stat = p_uart_obj->uart_regs->line_stat;
int int_type = (uart_isr_id & 0x0E) >> 1;
int int_pend = uart_isr_id & INT_PEND;
unsigned char ch = p_uart_obj->uart_regs->b_u.rx_buf;

    return 0;

}
当通过uart_isr()函数接收字符达到一定次数后,发生了以下错误
irq 15: nobody cared!
Call Trace:
[] uart_isr+0x68/0xa4 [uart]
[] __report_bad_irq+0x40/0xc0
[] try_to_wake_up+0x1d8/0x1e0
[] note_interrupt+0xdc/0x110
[] __do_IRQ+0x1ec/0x22c
[] do_IRQ+0x68/0x88
[] mipsIRQ+0x128/0x160
[] need_resched+0x40/0x48
[] r4k_wait+0x0/0xc
[] schedule+0x58/0x158
[] cpu_idle+0x7c/0xe8
[] r4k_wait+0x4/0xc
[] rest_init+0x28/0x48
[] printk+0x1c/0x28
[] start_kernel+0x1d0/0x278
[] unknown_bootoption+0x0/0x304

handlers:

Disabling IRQ #15

上百度、谷歌未能找到解决办法, 所以在这里向各位大神求助, 这是我的第一次完整的驱动程序。 先谢谢大家了。

1个回答

luckywang1103
luckywang1103   2014.12.30 16:09

内核的中断处理函数认为你没有正确的处理中断,
如果你的中断正常处理好了,应该return IRQ_HANDLED

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!