Linux kernel 启用后,ARM Cortex A8 PMNC读数也为0。。有什么想法/建议吗?

Linux kernel 启用后,ARM Cortex A8 PMNC读数也为0。。有什么想法/建议吗?,linux-kernel,arm,kernel-module,cpu-registers,cortex-a8,Linux Kernel,Arm,Kernel Module,Cpu Registers,Cortex A8,在init模块中,read给出1,但在cleanup模块中,读取变量给出0。 您知道它是如何更新的吗?从信息中可以看出,由于Linux内核的内部结构在不断变化,因此包含您感兴趣的精确内核版本是很有帮助的。谢谢您,比尔!!您如何定义包含精确内核版本?它是Android、Linaro还是Linux主线内核。该版本通常是3.8.3或类似的版本。最新版本为3.9-rc3。看起来最近在perf_事件infra结构中出现了一些搅动,它涉及到一些MCR/MRC寄存器。再见,谢谢你,比尔!!内核版本和细节:它的

在init模块中,read给出1,但在cleanup模块中,读取变量给出0。
您知道它是如何更新的吗?

从信息中可以看出,由于Linux内核的内部结构在不断变化,因此包含您感兴趣的精确内核版本是很有帮助的。谢谢您,比尔!!您如何定义包含精确内核版本?它是Android、Linaro还是Linux主线内核。该版本通常是3.8.3或类似的版本。最新版本为3.9-rc3。看起来最近在
perf_事件
infra结构中出现了一些搅动,它涉及到一些
MCR/MRC
寄存器。再见,谢谢你,比尔!!内核版本和细节:它的Linux主线3.0.20和一些小改动(比如3.0.20+)。我确信这些变化不会反映到PMNC或CCNT。
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("user-mode access to performance registers");

int __init arm_init(void)

{
    unsigned int value;

    /* enable user-mode access */
    printk(KERN_INFO "enable user-mode access\n");
    asm ("MCR p15, 0, %0, C9, C14, 0\n\t" :: "r"(1));

    /* Reading the value here--just to check */

    asm ("MRC p15, 0, %0, c9, c14, 0\t\n": "=r"(value));
    printk("value: %d\n", value);


    /* disable counter overflow interrupts (just in case)*/
    printk(KERN_INFO "disable counter overflow interrupts (just in case)\n");
    asm ("MCR p15, 0, %0, C9, C14, 2\n\t" :: "r"(0x8000000f));

    printk(KERN_INFO "user-mode access to performance registers enabled\n");
    return 0;
}


void arm_exit(void)
{
    unsigned int value;
    asm ("MRC p15, 0, %0, c9, c14, 0\t\n": "=r"(value));
    printk("value: %d\n", value);
    printk(KERN_INFO "user-mode access to performance registers disabled\n");
}

module_init(arm_init);
module_exit(arm_exit);