linux内核调试gdb + KGDB

Linux内核开发者使用最普遍的调试方法是printk方法,但是这种方法每次添加一些调试信息后还要重新编译烧写,效率不高,Kgdb调试方法是一种源码级的Linux内核调试器。使用Kgdb调试内核时,需要结合gdb一起使用,使用他们可以对内核进行单步调试,设置断点,观察变量、寄存器的值等。使用kgdb调试需要两台机器,即主机和目标机(一般为开发板),主机上使用gdb通过串口或者网络来调试目标机,目标机上需要内核配置支持kgdb。


kgdboc

kgdb的调试是通过串口
一、内核配置

Kernel hacking  --->
    -*- Kernel debugging
    [*] Compile the kernel with debug info
    [*] KGDB: kernel debugger  --->
        <*>   KGDB: use kgdb over the serial console

二、修改uboot启动参数
console=ttyS1,57600 kgdboc=ttyS1,57600 kgdbwait
kgdboc后面跟的是调试用的串口,如果需要调试内核的启动过程,需要在kgdboc后加入kgdbwait

三、pc上启动gdb调试
启动后Linux内核会停在如下地方

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...  

这时在pc上开始启动gdb调试,
rsdk-linux-gdb ./vmlinux.img
set serial baud 57600
target remote /dev/ttyUSB0
注,这里填的是ttyUSB0,因为pc上的串口接到开发板上的用的就是这个串口,而在uboot中填的是ttyS1,是因为在开发板上的这个串口对应是ttyS1


kgdboe

kgdb的调试是通过网络


参考文章

  1. 用 kGDB 调试 Linux 内核
  2. Linux内核驱动开发之KGDB单步调试内核(kgdboc方式)

你可能感兴趣的:(linux内核调试gdb + KGDB)