kprobe
内核调试一般可以通过printk打印,这种方式需要重新编译内核,或者模块,如果编译内核还要重启设备才能生效。kprobe是一种内核调试方式,可以在内核执行代码位置中断,并执行我们插入的代码。同时内核提供了另一套接口 kprobe-trace,这个接口的优点是通过proc接口操作,不需要写代码,适合做一些临时的debug打印。
Mount debug分区
命令:mount -t debugfs nodev /sys/kernel/debug
Nodev可以是任意字符串
后面的目录也可以随意指定
重要文件接口
配置接口:/sys/kernel/debug/tracing/kprobe_events
读取信息接口:/sys/kernel/debug/tracing/trace
读取信息接口:/sys/kernel/debug/tracing/trace_pipe
开启某个kprobe接口:/sys/kernel/debug/tracing/events/kprobes/<EVENT>/enabled
过滤接口/sys/kernel/debug/tracing/events/kprobes/<EVENT>/filter
kprobe_events
添加删除kprobe的接口,直接echo 'xxxx' >>kprobe_events就可以。内核文档比较详细,但是大多数参数没什么用。如下:
p[:[GRP/]EVENT] [MOD:]SYM[+offs]|MEMADDR [FETCHARGS] : Set a probe
r[:[GRP/]EVENT] [MOD:]SYM[+0] [FETCHARGS] : Set a return probe
-:[GRP/]EVENT : Clear a probe
GRP : Group name. If omitted, use "kpr