簡體   English   中英

linux內核模塊在100000次中斷后死亡

[英]linux kernel module dies after 100000 interrupts

我正在為2.6.39內核開發內核模塊。 (我知道這已經過時了,但這是我的評估板附帶的內容,我希望在轉到3.x系列之前讓它工作。)

我的模塊目前非常簡單。 它在GPIO引腳上偵聽200us脈沖,然后遞增計數器,每25089次迭代重置一次。 (25089是稍后要使用的緩沖區的大小。)奇怪的是,我的模塊在每次使用它時都會在100000次中斷后死亡,而我真的很茫然。 我看着改變內核的jiffy頻率,但這似乎與它無關。 我也試過使用無滴答內核,這似乎也沒有效果。 我也無法在Google上找到關於此問題的任何內容。 還有其他人看過這個問題嗎?

我正在為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在10萬次之后感到不安 - 請參閱上面的評論__report_bad_irq並找到這個神奇的數字。

您的中斷處理程序可能永遠不會返回IRQ_HANDLED ,這是處理中斷后應該執行的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM