gpt4 book ai didi

c - linux 内核模块在 100000 次中断后死掉

转载 作者:太空狗 更新时间:2023-10-29 14:51:16 24 4
gpt4 key购买 nike

我正在为 2.6.39 内核开发一个内核模块。 (我知道这已经过时了,但它是我的评估板附带的,我想在转向 3.x 系列之前让它工作。)

目前我的模块非常简单。它监听 GPIO 引脚上的 200us 脉冲,然后递增一个计数器,该计数器每 25089 次迭代重置一次。 (25089 是稍后要使用的缓冲区的大小。) 奇怪的是,我的模块每次使用它时都会在正好 100000 次中断后死掉,我真的很茫然。我查看了更改内核瞬时频率,但这似乎无关紧要。我也试过使用无滴答内核,但似乎也没有效果。我在谷歌上也找不到很多关于这个问题的信息。还有其他人看到这个问题吗?

如果这很重要,我正在为 Atmel AT91 处理器构建。我将在下面列出我的崩溃消息。

root@at91:~# irq 56: nobody cared (try booting with the "irqpoll" option)
[<c0036804>] (unwind_backtrace+0x0/0xec) from [<c006eca4>] (__report_bad_irq+0x34/0xa0)
[<c006eca4>] (__report_bad_irq+0x34/0xa0) from [<c006eed0>] (note_interrupt+0x1c0/0x22c)
[<c006eed0>] (note_interrupt+0x1c0/0x22c) from [<c006d904>] (handle_irq_event_percpu+0x168/0x19c)
[<c006d904>] (handle_irq_event_percpu+0x168/0x19c) from [<c006d960>] (handle_irq_event+0x28/0x38)
[<c006d960>] (handle_irq_event+0x28/0x38) from [<c003ace0>] (gpio_irq_handler+0x74/0x98)
[<c003ace0>] (gpio_irq_handler+0x74/0x98) from [<c002b078>] (asm_do_IRQ+0x78/0xac)
[<c002b078>] (asm_do_IRQ+0x78/0xac) from [<c00313d4>] (__irq_svc+0x34/0x60)
Exception stack(0xc04b1f70 to 0xc04b1fb8)
1f60: 00000000 0005317f 0005217f 60000013
1f80: c04b0000 c04b61cc c04b5ffc c04e1224 20000000 41069265 20025cbc 00000000
1fa0: 600000d3 c04b1fb8 c0032cc8 c0032cd4 60000013 ffffffff
[<c00313d4>] (__irq_svc+0x34/0x60) from [<c0032cd4>] (default_idle+0x38/0x40)
[<c0032cd4>] (default_idle+0x38/0x40) from [<c0032af8>] (cpu_idle+0x70/0xc8)
[<c0032af8>] (cpu_idle+0x70/0xc8) from [<c00089c0>] (start_kernel+0x284/0x2e4)
[<c00089c0>] (start_kernel+0x284/0x2e4) from [<20008038>] (0x20008038)
handlers:
[<c01eb660>] (grab_spi_data+0x0/0x6c)
Disabling IRQ #56


root@at91:~# cat /proc/interrupts
CPU0
1: 1387 AIC at91_tick, at91_rtc, ttyS0
12: 39 AIC atmel_mci.0
13: 0 AIC atmel_spi.0
14: 0 AIC atmel_spi.1
17: 1804 AIC tc_clkevt
20: 7520 AIC at_hdmac
21: 0 AIC at_hdmac
22: 1 AIC ehci_hcd:usb1, ohci_hcd:usb2
23: 0 AIC atmel_usba_udc
24: 136 AIC eth0
26: 0 AIC atmel_mci.1
56: 100000 GPIO quicklogic_ready
80: 0 GPIO atmel_usba_udc
142: 0 GPIO mmc-detect
143: 1 GPIO mmc-detect
Err: 0

我的中断处理程序称为 grab_spi_data,您可以看到它是回溯的底部,我正在观察 IRQ 56。我真的很难过。

最佳答案

看起来您没有处理 IRQ。
Linux 在 100,000 次后变得不安 - 请参阅 the comment above __report_bad_irq并找到这个神奇的数字。

您的中断处理程序可能永远不会返回 IRQ_HANDLED,这是它在处理中断后应该做的事情。

关于c - linux 内核模块在 100000 次中断后死掉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19101687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com