天天看點

arm linux gdb 核心調試,arm-linux-gdb+ddd+kgdb

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

(1) 安裝patch工具

# apt-get install quilt

(2) 安裝DDD

# apt-get install ddd

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

Ubuntu自帶的GDB工具是基于X86的,需要自己編譯ARM平台的GDB工具

把CD光牒中的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)把CD光牒中的/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

copyright .......

(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啟動核心的列印資訊。