簡體   English   中英

Gnu調試器和Linux內核

[英]Gnu Debugger & Linux Kernel

我已經編譯了自己的內核模塊,現在我希望能夠將其加載到GNU Debugger GDB中。 一年前,我這樣做一次,以了解內存布局。 那時一切正常,但我當然太傻了,無法寫下實現此目標的單個步驟...任何人都可以啟發我或為我提供出色的教程嗎?

非常感謝

對於大於2.6.26的內核(即2008年5月之后),首選方法可能是使用“ kgdb light”(不要與它的祖先kgdb混淆,可以作為一組內核補丁來使用)。 “ kgdb light”現在是內核的一部分(例如,默認情況下在當前的Ubuntu內核中),並且它的功能正在快速提高(Jason Wessel正在研究它-可能是google key)。

缺點:您需要兩台計算機,正在調試的計算機和運行gdb的開發計算機(主機)。 當前,這兩台機器只能通過串行鏈接鏈接。 kgdb在目標計算機上運行,​​該計算機在其中處理斷點,步進等,並且遠程調試協議用於與開發計算機進行通信。 gdb在處理用戶界面的開發機器中運行。 USB轉串口適配器在開發機器上可以正常工作,但是目前,您需要在目標機器上使用真正的UART,而在最新的硬件上不再那么頻繁了。

(簡短的)kgdb文檔位於內核源代碼的Documentation / DocBook中。

我建議您到處搜索“ kgdb light”以獲取完整的故事。 再次,不要混淆kgdb和kgdb light,它們在Google搜索中一起出現,但大多是不同的動物。 特別是,來自linsyssoft.com的信息與“祖先” kgdb有關,因此請嘗試以下查詢:

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

並丟棄2008年5月/ 2.6.26內核之前的文章。 最后,對於模塊調試,您需要針對所有感興趣的代碼和部分在dev機器中手動加載模塊符號。在這里要解決的時間太長,但是那里那里那里都有一些線索 最重要的是,kgdb是一個非常受歡迎的改進,但是不要期望這次旅行像在用戶模式下運行gdb一樣容易。 然而。 :)

自從我積極開發Linux驅動程序以來已經有一段時間了,所以也許我的答案有點過時了。 我會說您不能使用GDB。 如果有的話,僅調試轉儲文件上的事后檢驗。 要進行調試,您應該使用內核調試器。 在啟用了內核調試器的情況下構建內核(存在一個針對2.6的現成的調試器,在我處於活動狀態時缺少該調試器)。 我從Sun ftp://oss.sgi.com/www/projects/kdb/download/使用了KDB的內核補丁,對此我感到非常滿意。 除非新的gdb以某種方式與內部內核調試器進行通信(無論如何都必須激活),否則用戶空間工具不會有太大用處。

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

我懷疑你所做的是

gdb /boot/vmlinux /proc/kcore

當然,您實際上無法進行任何調試,但是足以在內核中進行調試了。

暫無
暫無

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

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