1. 程式人生 > >ddd+kgdb除錯核心

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