Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15287
  • 博文数量: 3
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 55
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-10 10:22
文章分类
文章存档

2013年(3)

我的朋友

分类: LINUX

2013-03-06 21:48:25

在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) |
0

上一篇:oprofile init错误处理

下一篇:没有了

给主人留下些什么吧!~~