ddd kgdb除錯核心

2021-06-19 19:31:07 字數 2831 閱讀 5344

一、linux主機需要安裝的軟體

(1) 安裝patch工具

# apt-get install quilt

(2) 安裝ddd

# apt-get install ddd

(3) 編譯、安裝arm-linux-gdb

ubuntu自帶的gdb工具是基於x86的,需要自己編譯arm平台的gdb工具

把光碟中的gdb-6.7.tar.bz2拷貝到linux主機/home/smb_share

# cd /home/smb_share

# tar -jxvf gdb-6.7.tar.bz2

# cd gdb-6.7/

# ./configure --target=arm-linux

// 編譯

# make

make時會出現error,把出錯檔案所在目錄的makefile中的warn_cflags中「-werror」這個選項刪除掉即可。

// 安裝到家目錄的bin/下面,改名為arm-linux-gdb

# cp gdb/gdb ~/bin/arm-linux-gdb

二、給linux核心打kgdb補丁

(1)把光碟中的/work/debug/kgdb-2_linux2_6_22_uprev.tar.bz2拷貝到linux主機上/home/smb_share,解壓出kgdb-2目錄。

(2)# cd /home/smb_share/kernel/linux-2.6.22.6

// 拷貝到核心目錄,改名為patches

# cp -rf /home/smb_share/kgdb-2 ./patches

// 打補丁

# quilt push -a

(3) 修改筆誤 include/asm-arm/system.h第380行

新增檔案arch/arm/mach-s3c2410/kgdb-serial.c

參考:《完全手冊》p368。

(4) 修改核心配置檔案

參考:《完全手冊》p370頁。

(5) 編譯核心

# make

# cd arch/arm/boot/

# mkimage -n 'linux-2.6.30.4' -a arm -o linux -t kernel -c none -a 0x30008000 -e 0x30008000 -d zimage uimage

(6)把uimage通過tftp燒寫到nand flash

三、使用arm-linux-gdb除錯核心

1. 開發板uboot啟動引數設定為

setenv bootargs 'noinitrd console=kgdb kgdbwait init=/linuxrc root=/dev/nfs nfsroot=192.168.1.111:/home/nfs ip=192.168.1.117:192.168.1.111:192.168.1.1:255.255.255.0::eth0:off'

2. 開發板上電,在解壓核心之後,停止在:

linux...........................................done, booting the kernel.

核心在等待主機arm-linux-gdb的連線。

3. 主機啟動arm-linux-gdb

# cd /home/smb_share/kernel/linux-2.6.22.6

# arm-linux-gdb ./vmlinux

顯示arm-linux-gdm啟動資訊,進入控制介面:

gnu gdb 6.7

(gdb)

4. 設定視窗

(gdb) set remotebaud 115200

5. 連線開發板

(gdb) target remote /dev/ttys0

顯示如下資訊:

breakpoint () at kernel/kgdb.c:1776

1776 wmb();

(gdb)

>>>>>下面可以開始除錯。

四、通過ddd呼叫arm-linux-gdb來除錯核心(圖形介面)

首先執行上面三中的1和2兩個步驟

# cd /home/smb_share/kernel/linux-2.6.22.6

# vim .gdbinit

內容為: set remotebaud 115200

target remote /dev/ttys0

# ddd --debugger arm-linux-gdb ./vmlinux

>>此時進入圖形除錯介面。

五、關於在vmware中新增串列埠(我的windows xp主機上,帶有com0,如果是usb轉串列埠,也可以配置成功)

1.關閉虛擬機器,在vmware虛擬機器的 vmx 檔案中,新增:

serial0.present = "true"

serial0.filetype = "device"

serial0.filename = "com1"

2.啟動虛擬機器,在虛擬機器串列埠設定中:[vm]-[setting]-[serial port]

把 connected, connect at power on, yield cpu on poll都勾選上。

3.linux主機安裝minicom測試下串列埠是否可用

# apt-get install mimicom

4. 設定minicom

# minicom -s

設定串列埠為:/dev/ttys0,無流控 ==>儲存

5.測試串列埠

# minicom

用串列埠線連上開發板和主機的串列埠,開發板上電,此時在minicom 上可以看到uboot啟動核心的列印資訊。

ddd kgdb除錯核心

一 linux主機需要安裝的軟體 1 安裝patch工具 apt get install quilt 2 安裝ddd apt get install ddd 3 編譯 安裝arm linux gdb ubuntu自帶的gdb工具是基於x86的,需要自己編譯arm平台的gdb工具 把光碟中的gdb 6...

linux 核心除錯

debug.hacks 一書中,介紹了如果除錯核心問題,在第五章的 實踐核心除錯 總體來說,有一下的方法來除錯核心 1.用kgdb單步除錯。具體請參見 2.加列印printk來定位。3.根據核心出錯的kernel panic oops資訊,反彙編,定位問題 4.編寫復現程式,或者創造復現條件。5.g...

systemtap除錯核心

systemtap是核心開發者必須要掌握的乙個工具,本文我將簡單介紹一下此工具,後續將會有系列文章介紹systemtap的用法。假如現在有這麼乙個需求 需要獲取正在執行的 linux 系統的資訊,如我想知道系統什麼時候發生系統呼叫,發生的是什麼系統呼叫等這些資訊,有什麼解決方案呢?下面將會介紹sys...