ARM-使用KGDB调试内核

 今天看了《嵌入式linux应用开发 完全手册》中第18章,关于使用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(); /*Sync point before breakpoint */

(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启动内核的打印信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IOT物联网小镇

赏点银子去植发

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值