开发者社区> 问答> 正文

测试驱动时发生 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

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

展开
收起
云栖技术 2016-06-02 23:40:25 2860 0
1 条回答
写回答
取消 提交回答
  • 社区爱好者,专为云栖社区服务!

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

    2019-07-17 19:25:39
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
移动互联网测试到质量的转变 立即下载
给ITer的技术实战进阶课-阿里CIO学院独家教材(四) 立即下载
F2etest — 多浏览器兼容性测试整体解决方案 立即下载