首页 > 代码库 > 在qemu模拟的aarch32上使用kgtp

在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

使用下面的命令编译

makemake 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 ]# gdbGNU gdb (GDB) 8.0Copyright (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/gtpRemote 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 ./vmlinuxGNU gdb (Sourcery CodeBench Lite 2014.05-29) 7.7.50.20140217-cvsCopyright (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:2345Remote debugging using 192.168.1.2:23450x00000000 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) 

 

完。

在qemu模拟的aarch32上使用kgtp