2010-05-07 181 views
0

我想運行一個使用內核模式驅動程序的應用程序。系統每小時鎖定一次,恢復它的唯一方法是重置硬盤。 Sysrq停止響應,遠程登錄會話掛起並且沒有任何類型的錯誤消息。不幸的是,該董事會沒有ejtag支持。我一直試圖在功能上進行隔離,但這就像在乾草堆裏尋找針。有什麼建議麼? PS:這是一個mips linux系統(2.6.31)。調試內核掛起

+0

我很好奇 - 這是什麼問題? – jbarlow 2010-06-18 18:24:41

+0

它被困在一個經常使用的自旋鎖中。代替開始使用spin_lock_irq。我們通過將消息寫入臨時內存位置來發現問題。 – 2010-06-30 02:25:10

回答

3

以下是一些選項,具體取決於您的具體情況。如果您可以提供有關內核模式驅動程序的平臺和性質的更多詳細信息,那將會很有幫助。

假設您有理由對硬件有信心,您可能的鎖定源會鎖定內核中的問題,未初始化的變量以及禁用先佔的無限循環。

您可以配置一個定時器中斷來定期運行並使LED閃爍?您可能會發現查看中斷是否繼續在鎖定時處理很有用。

在Linux內核黑客菜單中啓用軟鎖定檢測,以及任何其他相關的內核黑客功能。 Linux可能需要一兩分鐘的時間才能檢測到並報告軟鎖定。你等了很長時間來檢查這個嗎?

在內核黑客中啓用鎖相關性檢查,並修復驅動程序中報告的任何鎖定錯誤。

嘗試更改內核搶佔模式。這改變了一些系統鎖的行爲,在某些情況下將死鎖轉化爲危害較小的鎖。如果相關/可能,請禁用SMP。

1

不幸的是,沒有sysreq的操作,或者一些戳穿底層系統的方式,你運氣不好。

如果你能從系統中獲得一些行爲(可能是硬件看門狗?),我會推薦kdump。此外,如果這是一個更近期的問題,請先開始平分驅動程序代碼以確定發生崩潰的位置。

0

如果內核沒有完全掛起,並且仍然有中斷,那麼可以使用KGDB。

如果你不能這樣做,你可以添加更多的日誌代碼到你的驅動程序來追蹤問題的根源。我至少會在每個函數的入口處放一個printk(),並且可能在每個函數的每個出口處都放一個printk()。這應該至少可以幫助您找出問題發生的位置。