1、安装systemtap
安装linux kernel的debug info有两种方法
sudo apt-get install systemtap
仅仅有systemtap,是不能探测Linux内核信息的,需要装内核的debuginfo,有两种方法
第一种:
1、安装kernel-debug-info包
可以参考这篇blog http://blog.chinaunix.net/uid-24774106-id-3404192.html
第二种:
2、编译内核
可以参考这篇bolg http://blog.csdn.net/vah101/article/details/7426835
还有这篇blog http://blog.chinaunix.net/uid-7427553-id-2627651.html
3、经过以上安装配置后,就可以跟踪监控内核信息了,但是现在还不能跟踪linux内核模块的信息,因为,systemtap对linux内核模块的跟踪是通过libelf库来查找
/usr/lib/debug目录下以.ko.dedug结尾的模块,但是linux发行版通常将linux模块的扩展名修改为.ko。
sudo apt-get install elfutils
可以参考这个blog http://blog.csdn.net/sunnybeike/article/details/7752005
http://dikar.iteye.com/blog/1477619
官网 http://sourceware.org/systemtap/wiki/SystemtapOnUbuntu
http://www.newsmth.net/nForum/#!article/KernelTech/55057
测试用例
stap -e 'probe kernel.function("sys_open") {log("hello world") exit()}'
stap -e 'probe begin{printf("hello"); exit();}'
关于systemtap的一些命令
可以参考这篇blog http://www.cnblogs.com/yjf512/p/3286429.html
还有这篇blog http://www.ibm.com/developerworks/cn/linux/l-systemtap/
-v
提供脚本运行的详细输出,可以使用多个的,比如stap -vv script.stp 输出的信息比stap -v script.stp多
-e 'script'
使用script而不是文件作为输入
-m
输出内核模块
-r
使用的内核
-g
嵌入式c
就能生成module_name.ko模块
然后在目标机上运行staprun module_name.ko就可以执行这个trap
查看网卡型号
lspci | grep Ethernet
查看网卡驱动
sudo apt-get install ethtool
ethtool -i eth0
第二种方法:
参考:http://stackoverflow.com/questions/12545573/systemtap-couldnt-recognize-external-module-that-i-write-how-to-solve-it
或者http://m.blog.chinaunix.net/uid-7585066-id-2048719.html/
1、把新增内核模块拷贝到 /lib/modules/$(uname -r)/kernel/drivers/
2、在 /lib/modules/`uname -r`/modules.order里加上一行/kernel/drivers/YOUR_MODULE_NAME