KGTP 介紹 KGTP 是一個能在產品系統上實時分析 Linux 內核和應用程式(包括 Android)問題的全面動態跟蹤器。 使用 KGTP 不需要 在 Linux 內核上打 PATCH 或者重新編譯,只要編譯 KGTP 模塊並insmod 就可以。 其讓 Linux 內核提供一個遠程 GDB ...
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 [email protected]: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)
完。