不知道这里是不是合适的地方,但我真的需要帮助。
我试图在GalaxyNexusAndroidv4.3CPU ARMv7上收集一些数据。我试图使用ARM流线型,但它提供了以下错误:
已检测到ARM处理器PMU事件计数器,但事件计数器正在读取零。事件计数器包括核心名称下的“计数器配置选项”对话框中列出的计数器,但不包括由专用计数器控制的循环计数器(时钟:周期)。可能PMU配置位DBGEN尚未启用,随后计数器值将始终读取为零。要补救,请更新您的固件或Linux内核,以启用DBGEN。
经过一些搜索,我发现了类似的问题:https://community.freescale.com/thread/302685
建议对SDER安全调试启用寄存器(安全扩展)进行一些修改。
我不知道该怎么做,所以我在内核源代码中找到了一个文件perf_event,但不知道从哪里开始。
我在这里发现了我应该使用的unit.pdf for ARM11
enter code here
// MRC p15, 0, <Rd>, CRn, CRm, opCode_2 ; base
MRC p15, 0, <Rd>, c15, c12, 0 ; Read Performance Monitor Control Register
MCR p15, 0, <Rd>, c15, c12, 0 ; Write Performance Monitor Control Register它位于perf_event_v6.c内核文件夹中,如下所示:
static inline unsigned long
armv6_pmcr_read(void)
{
u32 val;
asm volatile("mrc p15, 0, %0, c15, c12, 0" : "=r"(val));
return val;
}由于我使用的是arm7版本,所以我应该修改perf_event_v7.c,并猜测我应该使用c9而不是c15,因为这里使用的选项是用于EX的Cortex参考手册中提到的:
表4-10显示了当c9是c9时可以访问的CP15系统控制寄存器。表4-10 c9寄存器摘要Op1 CRm Op2名称类型重置描述0 c12 0 PMCR RW 0x41093000性能监视器控制寄存器1 PMCNTENSET RW 0x00000000计数启用寄存器2 PMCNTENCLR RW 0x00000000计数启用清除寄存器3 PMOVSR RW -溢出标志状态寄存器4 PMCR-软件集成寄存器5 PMSELR RW 0x00000000事件计数器选择寄存器
所以应该是: MRC p15,0,,c9,c12,0;读取性能监视器控制寄存器
MCR p15, 0, <Rd>, c9, c12, 0 ; Write Performance Monitor Control Register和MRC p15,0,c9,c12,5;阅读PMSELR寄存器。
MCR p15, 0, <Rd>, c9, c12, 5 ; Write PMSELR Register并选择下列活动:
EXPORT pmn_config
; Sets the event for a programmable counter to record
; void pmn_config(unsigned counter, uint32_t event)
; counter (in r0) = Which counter to program (e.g. 0 for PMN0, 1 for PMN1)
; event (in r1) = The event code (from appropriate TRM or ARM Architecture Reference Manual)
pmn_config PROC
AND r0, r0, #0x1F ; Mask to leave only bits 4:0
MCR p15, 0, r0, c9, c12, 5 ; Write PMSELR Register
ISB ; Synchronize context
MCR p15, 0, r1, c9, c13, 1 ; Write PMXEVTYPER Register
BX lr
ENDP我应采取以下步骤:应遵循以下程序:
Disable performance counters
Set what each event counter will count
Set cycle counter tick rate
Reset performance counters
Enable performance counters
Call function to profile
Disable performance counters
Read out performance counters
Check that performance counters did not overflow但我还是不知道怎么做。
有什么帮助吗?
发布于 2014-07-25 10:22:57
此链接可能会帮助您-> https://code.google.com/p/mycodespot/wiki/DirectPMUCodeGCC
该链接包含PMU头和程序集代码以及如何使用代码和编译的应用程序示例。
https://stackoverflow.com/questions/22567859
复制相似问题