linux 内核单步,Linux内核驱动开发之KGDB单步调试内核(kgdboc方式)

/**********************************************************************************************************************************/

关键步骤:

一、配置Linux内核,使其支持KGDB。

依次进行如下配置:

$make menuconfig(下面配置为必须进行的)

Kernel hacking--->

-*- Magic SysRq key

[*] Kernel debugging

[*] Compile the kernel with debug info

[*] KGDB: kernel debugging with remote gdb --->

KGDB: use kgdb over the serial console

配置成功后进行Linux内核的编译。makeuImage并生成uImage拷贝到nfs/tftp服务器,等待u-boot下载内核或者直接烧到flash从flash上启动。

二、修改u-boot的启动参数bootargs以支持kgdb调试:

setenv bootargs 'console=ttyS0,115200n8 kgdboc=ttyS0,115200 kgdbwait …… nfsroot=……'

主要增加以上红色字体部分,指定kgdb使用开发板上的哪个串口,注意这里是串口名而不是设备文件/dev/ttyS0。

三、配置虚拟机与PC机的串口映射。比如博主的Vmware虚拟机使用usb转串口到linux下串口设备名为/dev/ttyS1(将在第五步使用)。可以通过mincom进行实际测试。

四、在虚拟机linux系统下使用minicom启动开发板的内核:方法如下:

tftp进行下载内核

OMAP3_EVM # tftp

smc911x: detected LAN9220 controller

smc911x: phy initialized  #by guoqingbo

smc911x: MAC 02:01:05:96:02:01

Using smsc911x-0 device

TFTP from server 192.168.1.93; our IP address is 192.168.1.94

Filename 'uImage'.

Load address: 0x82000000

Loading: #################################################################

#################################################################

#################################################################

#################################################################

#################################################################

#################################################################

#################################################################

##########################

done

Bytes transferred = 2459200 (258640 hex)

使用bootm启动linux后会在下面输出信息处停下(要注意的是完成此步骤后务必要手工关闭该minicom会话,因为gdb远程连接时也需要此串口)等待gdb的连接:

Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled

serial8250.0: ttyS0 at MMIO 0x4806a000 (irq = 72) is a ST16654

console [ttyS0] enabled  #by guoingbo

serial8250.1: ttyS1 at MMIO 0x4806c000 (irq = 73) is a ST16654

serial8250.2: ttyS2 at MMIO 0x49020000 (irq = 74) is a ST16654

kgdb: Registered I/O driver kgdboc.

kgdb: Waiting for connection from remote gdb...

截图来说明一下:

b1c47c5aee983e9d578bbcc11fafc895.png

五、使用gdb调试vmlinux文件。使用前述博文《在ubuntu10.04成功移植gdbserver及gdbserver使用介绍(用于CCSV5.2远程调试ARM CORTEX-A8程序)》移植的arm-none-linux-gnueabi-gdb进行调试内核文件vmlinux。方法如下:

在linux内核源码根目录下创建一个.gdbinit文件,其内容为:

set remotebaud 115200

target remote /dev/ttyS1

然后同样在Linux内核源码目录下运行如下命令:

arm-none-linux-gnueabi-gdb ./vmlinux

不出意外的会有如下信息输出则说明已经连接成功,可以像gdb调试应用程序一样调试linux内核了。

Reading symbols from /home/ss/develop_environment/v2/sys/dvsdk/ti-dvsdk_dm3730-evm_4_02_00_06/psp/linux-2.6.32-psp03.00.01.06.sdk/vmlinux...done.

During symbol reading, DW_AT_name missing from DW_TAG_base_type.

During symbol reading, unsupported tag: 'DW_TAG_const_type'.

During symbol reading, Child DIE 0x408b33 and its abstract origin 0x4085ee have different parents.

During symbol reading, DW_AT_type missing from DW_TAG_subrange_type.

kgdb_breakpoint () at kernel/kgdb.c:1744

1744            arch_kgdb_breakpoint();

(gdb)

截图:

7d20f1e3fe34e533331b3233d62674f3.png

六、若用DDD图形界面调试:前四个步骤相同,只需第五步中的命令换成

ddd --debugger arm-none-linux-gnueabi-gdb ./vmlinux命令即可。

643c551a13cb3bc917b0d0ccade7baeb.png

DDD调试内核的界面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值