zoukankan      html  css  js  c++  java
  • kgtp

    kgtp使用总结
    1,介绍:
    Kgtp项目主页是:http://code.google.com/p/kgtp/
    如其项目主页所描述,Kgtp是一个实时且轻量级的Linux跟踪内核调试工具。也许说是一个内核跟踪调试接口更合适,通过它来连通内核和GDB,使得GDB可以对内核进行跟踪调试。GDB既可以是在本机,也可以在另外一台机器上,甚至还可以进行离线调试,而这些感觉应该都是GDB本身提供的Targets、Trace Files等功能,而Kgtp主要还是进行内核调试信息的收集与交互、导出等,当然,Kgtp可能也会提供一些其它辅助GDB的功能。
    Kgtp目前支持X86-32,X86-64,MIPS和ARM平台。

    2,编译:
    2.1,内核
    既然是跟踪调试内核,选定并编译我们自己的内核是必须的,内核的编译安装等步骤无需多说,但为了达到本文的既定目的,选上如下几个编译选项是必不可少的:

    1
    2
    3
    4
    5
    6
    General setup  --->
         [ * ] Prompt for development and/or incomplete code/drivers
         [ * ] Kprobe
    Kernel hacking  --->
         [ * ] Compile the kernel with debug info
         [ * ] Compile the kernel with frame pointers

    2.2,Kgtp
    从Kgtp主页下载到最新的项目源码,我这里是kgtp_20111111.tar.bz2,解压、make即可:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    [root@localhost ~]# tar xjf kgtp_20111111.tar.bz2
    [root@localhost ~]# cd kgtp
    [root@localhost kgtp]# make
    gcc -O2 -o getmod getmod.c
    gcc -O2 -o getframe getframe.c
    /tmp/cca2MJof.o: In function `main':
    getframe.c:(.text+0x308): warning: the use of `mktemp' is dangerous, better use `mkstemp'
    make CROSS_COMPILE= -C /lib/modules/2.6.36/build/ M=/root/kgtp modules
    make[1]: Entering directory `/usr/src/linux-2.6.36'
      CC [M]  /root/kgtp/gtp.o
      Building modules, stage 2.
      MODPOST 1 modules
      CC      /root/kgtp/gtp.mod.o
      LD [M]  /root/kgtp/gtp.ko
    make[1]: Leaving directory `/usr/src/linux-2.6.36'
    [root@localhost kgtp]#

    如果是ARM等需要交叉编译环境,那就修改一下目录里的Makefile文件,不表。

    3,安装使用:
    3.1,安装
    编译之后的Kgtp就是一个内核模块,insmod即可,不过在insmod之前需先查看mount是否包含有如下两行:

    1
    2
    3
    4
    [root@localhost ~]# mount
    sysfs on /sys type sysfs (rw)
    none on /sys/kernel/debug type debugfs (rw)

    如果没有则需执行如下对应的命令进行挂载:

    1
    2
    [root@localhost ~]# mount -t sysfs none /sys/
    [root@localhost ~]# mount -t debugfs none /sys/kernel/debug/

    如果不这样做,会导致Kgtp模块安插完之后,/sys/kernel/debug/下什么没有,当然也可以无需进行检查,直接mount,最多也只是提示个“mount: xxx already mounted or xxx busy”的错误而已,反正不管怎样做,之后再进行insmod gtp.ko后,我们的Kgtp内核跟踪调试接口/sys/kernel/debug/gtp就有了:

    1
    2
    3
    [root@localhost kgtp]# insmod gtp.ko
    [root@localhost kgtp]# ls /sys/kernel/debug/gtp
    /sys/kernel/debug/gtp

    3.2,本地跟踪
    直接看命令如下,由于系统提供的GDB不支持python,也就是提示如下:

    1
    2
    3
    4
    [root@localhost ~]# gdb
    (gdb) python print 1
    Python scripting is not supported in this copy of GDB.
    (gdb)

    所以,我这里自己编译了一个从GDB官网下载的最新的GDB,Kgtp开源项目作者还提供了一个专门针对Kgtp有特别帮助的GDB变种gdbt,不过我这里先不去管它:

    1
    2
    3
    4
    5
    6
    [root@localhost ~]# cd /usr/src/linux-2.6.36/
    [root@localhost linux-2.6.36]# ~/gdb-7.3.1/gdb/gdb vmlinux
    (gdb) target remote /sys/kernel/debug/gtp
    Remote debugging using /sys/kernel/debug/gtp
    0x0000000000000000 in ?? ()
    (gdb)

    试一下打印内核全局变量如下,这说明我们的Kgtp起效果了。

    1
    2
    3
    4
    5
    6
    7
    (gdb) p jiffies_64
    $1 = 4296250220
    (gdb) p jiffies_64
    $2 = 4296252449
    (gdb) p jiffies_64
    $3 = 4296254936
    (gdb)

    4,总结:
    关于Kgtp的更多用法,比如远程跟踪、离线跟踪、条件跟踪等可以直接参考项目主页的帮助文档,我就不再赘述。下面主要说一下Kgtp能做什么,不能做什么,这才是我们最关注的重点。
    首先,我们要知道Kgtp提供的是trace而不是break,正因为这样,Kgtp才能不干扰中断内核的正常运行,也正因为这样,Kgtp只能做信息的采集功能,而不能做内核或模块的单步调试。那么具体来说,Kgtp提供的优点以及能够做的事情主要包括:
    4.1,简单独立
    这个是最重要的,简单才方便我们去使用它。Kgtp以单独模块存在,想使用时直接insmod,调试完毕时rmmod即可。同时,Kgtp不干扰中断内核的正常运行,将对内核的影响缩减到最小。
    4.2,查看当前系统全局变量
    前面已经看到如何利用Kgtp打印当前的内核变量jiffies_64,那么其它内核变量也类似打印出来,这在我们需要调试内核时有用,无需再去写个模块printk一下或其它变通办法。
    4.3,帮助我们调试模块
    模块执行出现异常,我们最常用的调式办法是在认为合适的地方加上printk查看对应的变量,发现第一次printk没放对地方或是需要查看的变量值却没有去printk,这时只能换个地方或修改对应的printk,改动和编译耗费不少时间,而通过Kgtp就比较方便。我们只需通过Gdb命令修改对应的变量信息收集即可。另外,Kgtp支持条件设置跟踪点,方便收集与统计更有针对性。
    4.4,系统性能瓶颈分析
    这才是Kgtp的强项,除了其提供了大量的自定义状态变量,更可以通过GDB scripts编写复杂的信息统计逻辑,方便提供分析,这点对做服务器运维的童鞋在进行系统性能分析时应该特别有用。

     http://code.google.com/p/kgtp/wiki/HOWTOCN#什么是KGTP

  • 相关阅读:
    OPPO R9sPlus MIFlash线刷TWRP Recovery ROOT详细教程
    OPPO R11 R11plus系列 解锁BootLoader ROOT Xposed 你的手机你做主
    努比亚(nubia) M2青春版 NX573J 解锁BootLoader 并进入临时recovery ROOT
    华为 荣耀 等手机解锁BootLoader
    青橙 M4 解锁BootLoader 并刷入recovery ROOT
    程序员修炼之道阅读笔03
    冲刺8
    典型用户模板分析
    学习进度八
    冲刺7
  • 原文地址:https://www.cnblogs.com/ahuo/p/2632227.html
Copyright © 2011-2022 走看看