在qemu模拟的aarch32上使用kgtp

Posted 摩斯电码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在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) 

 

完。

以上是关于在qemu模拟的aarch32上使用kgtp的主要内容,如果未能解决你的问题,请参考以下文章

CentOS7使用Qemu模拟ARM64

为Qemu aarch32 开发板添加sd卡

从 amd64 可执行文件调用 aarch64 共享库,可能使用二进制翻译/QEMU

Windows11 上使用 QEMU 创建 aarch64(ARM64)虚拟机

Windows11 上使用 QEMU 创建 aarch64(ARM64)虚拟机

kali 折腾 qemu