首页 > 代码库 > 在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