2010-01-27 81 views
1

我已經編譯了我自己的內核模塊,現在我想能夠將其加載到GNU Debugger GDB中 。我在一年前做了一次,在內存佈局上看看 。它工作得很好,但當然我太傻了 寫下了我採取的單個步驟來完成此任務...任何人都可以啓發 我或指點我一個很好的教程?Gnu調試器和Linux內核

謝謝你這麼多

回答

2

它已經有一段時間我正在積極開發Linux驅動程序,所以也許我的回答是有點過時了。我會說你不能使用GDB。如果有的話,只能在轉儲文件上進行調試。要調試你應該使用內核調試器。使用內核調試器來構建內核(2.6版本中有一個現成的調試器,這在我處於活動狀態時是缺乏的)。我使用了Sun ftp://oss.sgi.com/www/projects/kdb/download/的KDB內核補丁,我非常滿意。一個用戶空間工具不會有太大用處,除非新的gdb與內部內核調試器進行通信(無論如何,你將不得不激活)

我希望這給你至少一些提示,而不是一個詳細的答案。總比沒有答案好。問候。

1

我懷疑你做了什麼是

gdb /boot/vmlinux /proc/kcore 

當然,你不能真正做任何調試,但它肯定不夠好,周圍有內核一捅。

3

對於內核> 2.6.26(即2008年5月之後),首選的方式可能是使用「kgdb light」(不要與其祖先kgdb混淆,可作爲一組內核補丁)。 「kgdb light」現在是內核的一部分(例如,在當前的Ubuntu內核中默認情況下),並且它的功能正在快速提高(Jason Wessel正在研究它 - 可能是谷歌的關鍵)。缺點:你需要兩臺機器,一臺是你正在調試的機器,另一臺是運行gdb的開發機器(主機)。目前,這兩臺機器只能通過串行鏈接進行鏈接。 kgdb在處理斷點,步進等的目標機器中運行,並且遠程調試協議用於與開發機器通信。 gdb在處理用戶界面的開發機器上運行。 USB-to-serial適配器在開發機器上工作正常,但是目前,您需要在目標機器上安裝一個真正的UART - 而且這種情況在最近的硬件上不再那麼頻繁。

的(簡潔)的kgdb文檔是在內核源代碼,在 文檔/ DocBook的

我建議你谷歌周圍「的kgdb光」爲完整的故事。 同樣,千萬不要混淆kgdb和kgdb的燈光,它們會在谷歌搜索中一起出現,但大多是不同的動物。特別是,從linsyssoft.com信息涉及到的「祖先」的kgdb,所以儘量之類的查詢:

kgdb module debugging -"linsyssoft.com" -site:linsyssoft.com 

和之前可以丟棄物品2008/2.6.26內核。 最後,對於模塊調試,您需要在開發機器中手動加載模塊符號,以獲得您感興趣的所有代碼和部分。這裏有點太長了,但有些線索there,therethere. 底線是,千斤頂是一個非常受歡迎的改進,但不要指望這次旅行就像在用戶模式下運行gdb一樣簡單。然而。:)