zoukankan      html  css  js  c++  java
  • 在qemu模拟的aarch32上使用kgtp

    KGTP 介绍

    KGTP 是一个能在产品系统上实时分析 Linux 内核和应用程序(包括 Android)问题的全面动态跟踪器。 使用 KGTP 不需要 在 Linux 内核上打 PATCH 或者重新编译,只要编译 KGTP 模块并insmod 就可以。 其让 Linux 内核提供一个远程 GDB 调试接口,于是在本地或者远程的主机上的 GDB 可以在不需要停止内核的情况下用 GDB tracepoint 和其他一些功能调试和跟踪Linux内核和应用程序。

    Github

    https://github.com/teawater/kgtp

    在上面有帮助手册,也可以点击这里查看帮助手册

    本文目的

    在Qemu模拟的vexpress板子上面体验KGTP

    软件版本

    Linux 4.10

    Qemu-2.8

    ARM-Versatile Express

    arm-none-linux-gnueabi 4.8.3

    正文

    一、交叉编译gdb

    请参考博客 http://www.cnblogs.com/pengdonglin137/p/7093417.html

    编译完成后,将生成的gdb可执行程序拷贝到板子上

    二、重新编译kernel,打开相关的配置

    要编译kgtp的话,需要打开下面的几个配置:

    General setup --->
      [*] Kprobes
      [*] Enable loadable module support --->
    Kernel hacking --->
      Compile-time checks and compiler options  ---> 
        [*] Compile the kernel with debug info
      [*] Tracers  --->
        [*]   Enable uprobes-based dynamic events

    使能上面的配置后,重新编译kernel。

    三、交叉编译KGTP

    目前KGTP在Linux-4.10上还无法直接编译通过,需要稍作修改,修改后的kgtp我上传到了github,可以使用下面的命令下载:

    git clone git@github.com:pengdonglin137/kgtp.git -b  aarch32_version

    下载完成后,需要对Makefile稍作修改,将其中的INSTALL、KERNELDIR以及OUT

    使用下面的命令编译

    make
    make install

    然后将生成的可执行程序以及ko文件拷贝到板子上

    四、测试

    1、本地测试

    我们将编译出的vmlinux拷贝到板子上,加载gtp.ko,直接在板子上运行GDB,然后连接GTP,开始测试:

    # 在PC机上将vmlinux拷贝到NFS共享目录下
    cp /home/pengdonglin/src/qemu/aarch32/linux-4.10/out_aarch32/vmlinux /nfsroot/
    
    # 进入板子,挂载共享目录
    [root@vexpress ]# mount -t nfs -o nolock 192.168.1.100:/nfsroot /mnt
    
    # 加载驱动
    [root@vexpress ]# insmod /mnt/install/modules/gtp.ko 
    
    # 运行gdb
    [root@vexpress ]# gdb
    GNU gdb (GDB) 8.0
    Copyright (C) 2017 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "arm-none-linux-gnueabi".
    Type "show configuration" for configuration details.
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>.
    Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.
    For help, type "help".
    Type "apropos word" to search for commands related to "word".
    
    # 加在vmlinux
    (gdb) file /mnt/vmlinux 
    Reading symbols from /mnt/vmlinux...done.
    
    # 将gdb连接到gtp上
    (gdb) target remote /sys/kernel/debug/gtp
    Remote debugging using /sys/kernel/debug/gtp
    
    #打印jiffies_64变量
    (gdb) p jiffies_64
    $1 = 4294969128
    (gdb) p jiffies_64
    $2 = 4294969245
    (gdb) p jiffies_64
    $3 = 4294969332
    (gdb) p jiffies_64
    $4 = 4294969419
    (gdb) 

    可以看到,jiffies_64的值一直在递增。

    2、远程测试

    在PC上运行GDB,连接板子上的GTP,开始调试:

    在板子上运行nc命令:
    
    nc -l -p 2345 < /sys/kernel/debug/gtp > /sys/kernel/debug/gtp 
    
    之后,nc会在那里等待连接。
    
    在PC上运行GDB:
    
    $arm-none-linux-gnueabi-gdb ./vmlinux
    GNU gdb (Sourcery CodeBench Lite 2014.05-29) 7.7.50.20140217-cvs
    Copyright (C) 2014 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi".
    Type "show configuration" for configuration details.
    For bug reporting instructions, please see:
    <https://sourcery.mentor.com/GNUToolchain/>.
    Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.
    For help, type "help".
    Type "apropos word" to search for commands related to "word"...
    Reading symbols from ./vmlinux...done.
    # 连接板子上的GTP
    (gdb) target remote 192.168.1.2:2345
    Remote debugging using 192.168.1.2:2345
    0x00000000 in ?? ()
    
    # 查看jiffies_64的值
    (gdb) p jiffies_64
    $1 = 4295030342
    (gdb) p jiffies_64
    $2 = 4295030453
    (gdb) p jiffies_64
    $3 = 4295030536
    (gdb) p jiffies_64
    $4 = 4295030622
    (gdb) 

    完。

  • 相关阅读:
    正则表达式的学习笔记
    apply()的使用
    for循环性能测试
    js基础复习~Array对象
    判断值是否为undefined
    layui 单选框取消选中
    layui 表单验证
    火狐浏览器下,表头边框无效
    css3 宽度百分比减去固定宽度 无效问题
    javaScript中的 call 和 apply
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/7094862.html
Copyright © 2011-2022 走看看