在arm和powerpc上执行oprofile都出现了不同的问题。
PPC e500mc 报错如下
cpu_type 'unset' is not valid
猜测应该是不支持此CPU
armv7 报错如下
# opreport
error: no sample files found: profile specification too strict ?
跟踪到drivers/oprofile/buffer_sync.c文件,sync_buffer函数,
发现available = op_cpu_buffer_entries(cpu);结果始终为0,所以没有生成任何sample文件。
网上查到的有用资料粘贴如下:
==============================================================
arm上的工作方式大致是 先配置 performance monitor unit 的寄存器,然后注册中断,
到了事件到来的时候,中断就会被触发,
然后中断处理函数会调用oprofile_add_sample向oprofilefs文件系统进行信息转储,供后面的分析器使用
在arm11的中断注册处理函数里面却没有发现函数static irqreturn_t arm11_pmu_interrupt(int irq, void *arg) 被调用,
因为只有这个函数调用oprofile_add_sample才会被调用
没有数据样本被采样,所以没有结果输出,查中断注册的地方结果发现了如下代码
static int irqs[] = {
#ifdef CONFIG_ARCH_OMAP2
……
数组??irqs里面使用了预编译,也就是说这个中断只支持特定的CPU而不是通用的arm11核。
我们的机器不是 OMAP2系列自然中断没有被注册。
==============================================================
上面说到因为不是OMAP2系列,所以无法add sample oprofile,而我们现在使用的armv7是omap4系列,所以很可能不被支持,
但是还需要验证。
在drivers/oprofile/oprof.h中有如下代码:
#ifdef CONFIG_OPROFILE_NMI_TIMER
int op_nmi_timer_init(struct oprofile_operations *ops);
#else
static inline int op_nmi_timer_init(struct oprofile_operations *ops)
{
return -ENODEV;
}
#endif
发现ARM内核不支持CONFIG_OPROFILE_NMI_TIMER(NMI中断)选项。
所以只能使用timer mode。
阅读(2001) | 评论(0) | 转发(0) |