SystemTap工具能调试新增的内核模块
2015-11-19 17:11
281 查看
1、问题
SystemTap工具能调试新增的内核模块吗?比如自己编写的helloworld模块。
答案:是可以的。
2、关键点:
1)使用SystemTap调试内核模块,探测点的编写格式示例为:
module("ext3").function("ext3_*")
2)需要将新增的helloworld模块cp到/lib/modules/`uname
-r`/extra目录中,否则找不到符号。
3、实例:
1)helloworld模块
a)模块代码(hello.c):
点击(此处)折叠或打开
#include<linux/module.h>
#include<linux/init.h>
int test()
{
printk("Testing....\n");
}
int __init hello_init (void)
{
printk("HelloWorld\n");
test();
return 0;
}
void __exit hello_exit(void)
{
test();
printk("GoodBye\n");
}
EXPORT_SYMBOL_GPL(test);
MODULE_AUTHOR("jb ");
MODULE_DESCRIPTION("hello");
MODULE_LICENSE("GPL");
module_init(hello_init);
module_exit(hello_exit);
b)编译方法:新建一个Makefile文件。文件的内容如下:
obj-m :=hello.o
使用下面的命令进行编译:
# make -C /usr/src/kernels/`uname -r`/ modules M=$PWD
2)编译后的模块名为hello.ko,将其cp到/lib/modules/`uname
-r`/extra目录中,并安装模块:
cp ./hello.ko /lib/modules/`uname -r`/extra
insmod /lib/modules/`uname -r`/extra/hello.ko
3) 编写systemtap脚本,示例如下:
点击(此处)折叠或打开
probe module("hello").function("test")
{
print("Hello
Systemtap!\n")
}
4)执行systemtap脚本:
# stap
hello.stp > hello_output.txt &
# rmmod hello
SystemTap工具能调试新增的内核模块吗?比如自己编写的helloworld模块。
答案:是可以的。
2、关键点:
1)使用SystemTap调试内核模块,探测点的编写格式示例为:
module("ext3").function("ext3_*")
2)需要将新增的helloworld模块cp到/lib/modules/`uname
-r`/extra目录中,否则找不到符号。
3、实例:
1)helloworld模块
a)模块代码(hello.c):
点击(此处)折叠或打开
#include<linux/module.h>
#include<linux/init.h>
int test()
{
printk("Testing....\n");
}
int __init hello_init (void)
{
printk("HelloWorld\n");
test();
return 0;
}
void __exit hello_exit(void)
{
test();
printk("GoodBye\n");
}
EXPORT_SYMBOL_GPL(test);
MODULE_AUTHOR("jb ");
MODULE_DESCRIPTION("hello");
MODULE_LICENSE("GPL");
module_init(hello_init);
module_exit(hello_exit);
b)编译方法:新建一个Makefile文件。文件的内容如下:
obj-m :=hello.o
使用下面的命令进行编译:
# make -C /usr/src/kernels/`uname -r`/ modules M=$PWD
2)编译后的模块名为hello.ko,将其cp到/lib/modules/`uname
-r`/extra目录中,并安装模块:
cp ./hello.ko /lib/modules/`uname -r`/extra
insmod /lib/modules/`uname -r`/extra/hello.ko
3) 编写systemtap脚本,示例如下:
点击(此处)折叠或打开
probe module("hello").function("test")
{
print("Hello
Systemtap!\n")
}
4)执行systemtap脚本:
# stap
hello.stp > hello_output.txt &
# rmmod hello
相关文章推荐
- Maven学习(九)- 构建SSH项目
- Maven学习(八)- 构建MyBatis项目
- Maven学习(七)- 构建Spring项目
- Centos 7 上 Eclipse 无法输入中文解决方法
- listView和adapter的简单应用
- 文本文件二进制文件
- 移除UIView上的所有控件
- getset注释模板操作:getset注释获取字段上的文本注释
- POJ2485Highways(prime 水题)
- T-SQL查询进阶--详解公用表表达式(CTE)
- MyEclipse的Workspace目录中.metadata文件夹
- 通过等待事件学习Oracle 体系结构:(二)谈谈PGA和临时表空间
- django template 自定义filter的使用
- c++的动态申请内存
- bootstrap双日历时间段选择控件—daterangepicker(汉化版)
- 局部变量的强指针破解循环保留
- Struts2 package namespace的作用
- 为什么发布Webservice到服务器上后,在服务器的IIS上右键站点浏览网页无法浏览
- jQuery.validateyanz验证--有道笔记整理
- 有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n