|
我将2.6.12一直到一块powerpc 405的板子上,但在启动串口终端时出错了。
irq 20: nobody cared!
Call trace:
[a0005d98] dump_stack+0x18/0x28
[a0033b58] __report_bad_irq+0x34/0xac
[a0033ca0] note_interrupt+0x98/0xd4
[a0033694] __do_IRQ+0x138/0x13c
[a0004638] do_IRQ+0x50/0x98
[a0003448] ret_from_except+0x0/0x18
[a003394c] setup_irq+0xf4/0x120
[a0033af4] request_irq+0x98/0xc8
[a00eb010] serial_link_irq_chain+0xc0/0xdc
[a00eb4d4] serial8250_startup+0x1dc/0x344
[a00e66f0] uart_startup+0xb8/0x1b0
[a00e8960] uart_open+0xfc/0x18c
[a00d3918] tty_open+0x24c/0x340
[a005dbe0] chrdev_open+0xb8/0x13c
[a0052650] dentry_open+0x128/0x1d8
handlers:
[<a00eadcc>] (serial8250_interrupt+0x0/0xfc)
我跟踪了一下,发现这个错误的发生是因为在极短的时间内(可能不到一秒),serial8250_interrupt被调用了10万次,而且这10万次serial8250_interrupt的返回都不是IRQ_HANDLED,现在还不知道为什么会产生这么一个天文数字的中断。
- /* drivers/serial/8250.c */
- ret = request_irq(up->port.irq, serial8250_interrupt,
- irq_flags, "serial", i);
复制代码
我想问的是request_irq注册的中断,是不是一定要有对应硬中断信号过来,对应的中断调用函数才会被执行(比如serial8250_interrupt),当然前提是除了request_irq()其他地方都没有调用serial8250_interrupt。 |
|