2013-01-04 48 views
14

使用ARMv7作爲目標機器。我編譯了Linux源文件2.6.34.13作爲目標。如何在ARM上使用kgdb?

目標通過使用minicom的串行端口與主機(Linux開發機器)連接。

目標加載了新內核,並在命令提示符下啓用KGDB。

$ echo ttyAMA0 > /sys/module/kgdboc/parameters/kgdboc 
$ echo g > /proc/sysrq-trigger 

輸入KGDB ...消息並等待命令。

主機端

$arm-none-linux-gnueabi-gdb vmlinux 

    gdb > set remotebaud 115200 
    gdb > set debug remote 1 
    gdb > target remote /dev/ttyS0 

在此之後,一些命令通信在默認情況下發生的。

  1. qSupported從主機發送到目標。但是qSuppoted不被目標支持,所以返回$#00。類似地,?,HC-1命令被髮送但是收到適當的響應。

  2. 但是qOffsets命令沒有收到來自目標的任何響應。

我懷疑vmlinux。因爲如果我給list在gdb,它沒有顯示10行的代碼,而不是它說

arch/arm/kernel/head.S : No such file or directory. 

注::編譯內核服務器來完成。所以在開發機器中沒有可用的資源。但是arm-gdb尋找head.S似乎。

我不知道我在做什麼錯誤。我需要爲整個內核加載符號。在這方面指導我。

+0

我不知道,但你有沒有「主機」上編譯內核被用於調試? &你沒有把代碼移動到其他地方? – anishsane

+1

這就是爲什麼它無法找到源代碼? – anishsane

+0

'kgdb'是否需要源代碼可用?也許有一個命令行選項告訴'kgdb'不要查找代碼。 – BenjiWiebe

回答

1

最後主機到目標通信建立只是線路延遲的bcos。開發機器中的內核源與超時問題之間沒有任何關係。

對於一些命令的超時問題的種類說qOffsetqSupported通過使用GtkTerm代替小型機作爲串口通訊工具解決。 區別是GtkTerm「行延遲」選項。所以當它被配置爲〜250時,此後沒有超時消息。只需建立連接並在默認中斷點等待。如果有人知道如何給這個"line delay" Minicom中將會給大家更多的幫助。

是ofcourse,我們需要爲list要執行的命令的源代碼。但如果沒有這些人士還,我們可以調試即si, bt可與vmlinuxsystem.map的幫助下執行。

注::設置調試遠程1是沒有必要的。這給出了主機到命令通信的詳細顯示。有關更詳細的視圖,set debug serial 1

+0

這是一個答案? – unwind

+0

其觀察。 – Jeyaram

1

kgdb正在尋找head.S不是錯誤。如果你看here你會看到源樹中有一個head.S文件。這是一個彙編文件。這個平臺有幾個以彙編器編寫的源文件。

這很正常,因爲某些指令尤其是引導序列和其他「低級」功能是用匯編語言編寫的,因爲它更容易。

正如已經寫過的評論,gdb需要資源在調試時瀏覽它們。在包含調試符號並在運行gcc時生成的debug-sections中,只有對源文件,行和列等的引用是唯一的。有關更多信息,請參閱here以及有關使用gcc調試符號的更多鏈接。

kgdb正在尋找head.S是一個很好的跡象,表明您正在做的事情是正確的。如果你有可用的源代碼(並且可以像解開正確版本的tarball一樣簡單),只需在源代碼樹中運行kgdb,或者使用-d參數來添加源搜索路徑,當然在你的開發機器上。

+0

那翔實。謝謝。 – Jeyaram