kprobe

来源:互联网 发布:小微电视直播软件 编辑:程序博客网 时间:2024/04/30 09:37

1、保证编译环境可用。
1)获取 Compile_Tool-3.0.93-1.0.x86_64.rpm 。
2)解压:rpm2cpio Compile_Tool_3.0.93-1.0.x86_64.rpm  | cpio -div
3) 安装环境rpm包:rpm -ivh kernel-source-3.0.93-0.8.2.x86_64.rpm
                  rpm -ivh kernel-xen-devel-3.0.93-0.8.2.x86_64.rpm

2、修改samples/kprobes/Makefile ,如:
obj-m := kprobe_example.o

KDIR := /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd)

all:
            make -C $(KDIR) M=$(PWD) modules

clean:
            rm *.o *.ko *.mod.c Modules.symvers modules.order -f

3、增加samples/kprobes/kprobe_example.c用例后,make产生一个ko文件。

在linux目录下
make modules M=samples/kprobes

4、insmod  ko文件。 看dmesg信息打印。

 

 

vim /proc/kallsyms 获.取内核函数符号表

 

struct timespec ts0_start, ts0_end;

/* kprobe pre_handler: called just before the probed instruction is executed */
static int ocfs2_write_begin_handler_pre(struct kprobe *probe, struct pt_regs *regs)
{

dump_stack();
 ktime_get_ts(&ts0_start);
 printk("ocfs2_write_begin ... \n");
 //printk("ocfs2_write_begin, start_ns: %llu\n", timespec_to_ns(&ts0_start));
 return 0;
}

/* kprobe post_handler: called after the probed instruction is executed */
static void ocfs2_write_begin_handler_post(struct kprobe *p, struct pt_regs *regs,
    unsigned long flags)
{
 ktime_get_ts(&ts0_end);
 printk("ocfs2_write_begin spend time: %llu ns, ts0_start_ns: %llu, ts0_end_ns: %llu \n",
  timespec_to_ns(&ts0_end) - timespec_to_ns(&ts0_start), timespec_to_ns(&ts0_start), timespec_to_ns(&ts0_end)); 
}

 

 

0 0
原创粉丝点击