ftrace 使用示例

1.make menuconfig->Kernel hacking>Tracers>Kernel Function Tracer …
2.user manual
example:
If I am only interested in sys_nanosleep and hrtimer_interrupt:
# echo sys_nanosleep hrtimer_interrupt
> set_ftrace_filter
# echo function > current_tracer
# echo 1 > tracing_on
# usleep 1
# echo 0 > tracing_om
# cat trace
http://lxr.linux.no/linux+v2.6.33/Documentation/trace/ftrace.txt
3.how to use trace
https://www.jianshu.com/p/99e127973abe
开启 echo 1 > events/musb/musb_isr/enable
查看 cat trace

4.实现原理与过程
https://www.ibm.com/developerworks/cn/linux/1609_houp_ftrace/index.html
trace_point
step1,DECLARE_TRACE(name, proto, args)
step2,DEFINE_TRACE(name)
step3,代码中使用trace_##name,假设step1,2中的name为“musb_log”,则调用trace_musb_log
event trace
TRACE_EVENT(name, proto, args, struct, assign, print)

5.实现原理与过程(英文)
https://lwn.net/Articles/379903/
在TRACE_EVENT(name, proto, args, struct, assign, print)中,
name,args,struct用于描述用于打桩的函数格式,举例如下
TRACE_EVENT(musb_log,
TP_PROTO(struct musb *musb, struct va_format *vaf),
TP_ARGS(musb, vaf),
TP_STRUCT__entry(
__string(name, dev_name(musb->controller))
__dynamic_array(char, msg, MUSB_MSG_MAX)
),
TP_fast_assign(
__assign_str(name, dev_name(musb->controller));
vsnprintf(__get_str(msg), MUSB_MSG_MAX, vaf->fmt, *vaf->va);
),
TP_printk("%s: %s", __get_str(name), __get_str(msg))
);
代码中,通过调用下面的musb_dbg,来间接调用trace_musb_log(musb, &vaf);
void musb_dbg(struct musb *musb, const char *fmt, …)
{
struct va_format vaf;
va_list args;
va_start(args, fmt);
vaf.fmt = fmt;
vaf.va = &args;
trace_musb_log(musb, &vaf);
va_end(args);
}
struct,一般通过TP_STRUCT__entry定义,用于描述存储在trace ring buffer中的数据结构
assign,通过TP_fast_assign定义,struct中的数据结构成员如何赋值(使用args)
print,通过TP_printk定义,真正写入ring buffer的动作

6.使用之个人建议
还没有没有写过模块的trace event,之前调试打印一直用的printk串口打印,接触到musb驱动,才知道ftrace,个人觉得ring buffer机制实时性会比较好些,毕竟外设打印需要很长时间(相比于写buff文件),如果要在新的驱动模块添加trace,建议参考下kernel驱动中现有的模块trace,依葫芦画瓢,因为还有些细节的宏预定义等等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值