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