systemtap

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();}' 

stap -l  'module("*").function("*")'



关于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

stap -r kernel_version script -m module_name

就能生成module_name.ko模块

然后在目标机上运行staprun module_name.ko就可以执行这个trap


查看网卡型号

lspci | grep Ethernet

查看网卡驱动

sudo apt-get install ethtool

ethtool -i eth0


使用systemtap调试新增内核模块有两种方法

第一种方法:
1、将新增内核模块拷贝到 /lib/modules/`uname -r`/extra/
参考:http://blog.chinaunix.net/uid-14528823-id-4726046.html
或者:https://sourceware.org/ml/systemtap/2008-q2/msg00497.html

第二种方法:

参考: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

你可能感兴趣的:(操作系统)