概述
linux在系统关键位置都有插入一些tracepoint,这些tracepoint可以通过runtime在shell
目录/sys/kernel/debug/tracing/events下面看到.按照Documentation/trace/tracepoints.txt的描述:
A tracepoint placed in code provides a hook to call a function (probe)
that you can provide at runtime.
我们是可以提供自己的函数"connect"到这些现有
的tracepoints的.
实例
以irq_handler_entry为例,这个tracepoint是在irq发生的地方插入的.如果我们想知道irq发生的时机和参数,可以使用我们自己的函数"connect"过去.
int register_trace_irq_handler_entry(void (*probe)(void *__data,int irq,struct irqaction *action),void *data);
可以看到这个 connect 的函数原型和trace/events/irq.h里面的trace_irq_handler_entry
prototype只是多了一个data参数,而probe函数的__data参数实际上就是在register_trace_irq_handler_entry里面传入的第二个参数data.
TRACE_EVENT(irq_handler_entry,
TP_PROTO(int irq, struct irqaction *action),
我们定义一个简单的probe函数
static void