We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi,I'm trying to enable PMU's on arm versatile juno r2 development board.I've already read this manuals from arm:ARM ® Cortex ® -A72 MPCore ProcessorARM® Cortex ® -A53 MPCore ProcessorJuno r2 ARM® Development Platform SoCARM® Architecture Reference Manual ARMv8, for ARMv8-A architecture profileSearching online I found this guides:http://zhiyisun.github.io/2016/03/02/How-to-Use-Performance-Monitor-Unit-(PMU)-of-64-bit-ARMv8-A-in-Linux.htmlhttp://valtrix.in/programming/programming-armv8-performance-countershttp://syndication2605.rssing.com/chan-30054360/latest.php#item4https://github.com/thoughtpolice/enable_arm_pmu/blob/master/ko/enable_arm_pmu.chttp://ilinuxkernel.com/?p=1755The code i'm trying to compile (from the github link) on my host machine is:
/* * Enable user-mode ARM performance counter access. */ #include <linux/kernel.h> #include <linux/module.h> #include <linux/smp.h> /** -- Configuration stuff ------------------------------------------------- */ #define DRVR_NAME "enable_arm_pmu" #if !defined(__arm__) #error Module can only be compiled on ARM machines. #endif /** -- Initialization & boilerplate ---------------------------------------- */ #define PERF_DEF_OPTS (1 | 16) #define PERF_OPT_RESET_CYCLES (2 | 4) #define PERF_OPT_DIV64 (8) static void enable_cpu_counters(void* data) { printk(KERN_INFO "[" DRVR_NAME "] enabling user-mode PMU access on CPU #%d", smp_processor_id()); /* Enable user-mode access to counters. */ asm volatile("mcr p15, 0, %0, c9, c14, 0" :: "r"(1)); /* Program PMU and enable all counters */ asm volatile("mcr p15, 0, %0, c9, c12, 0" :: "r"(PERF_DEF_OPTS)); asm volatile("mcr p15, 0, %0, c9, c12, 1" :: "r"(0x8000000f)); } static void disable_cpu_counters(void* data) { printk(KERN_INFO "[" DRVR_NAME "] disabling user-mode PMU access on CPU #%d", smp_processor_id()); /* Program PMU and disable all counters */ asm volatile("mcr p15, 0, %0, c9, c12, 0" :: "r"(0)); asm volatile("mcr p15, 0, %0, c9, c12, 2" :: "r"(0x8000000f)); /* Disable user-mode access to counters. */ asm volatile("mcr p15, 0, %0, c9, c14, 0" :: "r"(0)); } static int __init init(void) { on_each_cpu(enable_cpu_counters, NULL, 1); printk(KERN_INFO "[" DRVR_NAME "] initialized"); return 0; } static void __exit fini(void) { on_each_cpu(disable_cpu_counters, NULL, 1); printk(KERN_INFO "[" DRVR_NAME "] unloaded"); } MODULE_AUTHOR("Austin Seipp <aseipp@pobox.com>"); MODULE_LICENSE("Dual MIT/GPL"); MODULE_DESCRIPTION("Enables user-mode access to ARMv7 PMU counters"); MODULE_VERSION("0:0.1-dev"); module_init(init); module_exit(fini);
PWD := $(shell pwd) obj-m += enable_arm_pmu.o all: make ARCH=arm CROSS_COMPILE=$(CROSS) -C $(KERNEL) SUBDIRS=$(PWD) modules clean: make -C $(KERNEL) SUBDIRS=$(PWD) clean
make KERNEL=/lib/modules/4.13.0-45-generic/build CROSS=aarch64-linux-gnu-
make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- -C /lib/modules/4.13.0-45-generic/build SUBDIRS=/home/lfpm1993/Desktop modules make[1]: Entering directory '/usr/src/linux-headers-4.13.0-45-generic' CC [M] /home/lfpm1993/Desktop/teste.o aarch64-linux-gnu-gcc: error: unrecognized argument in option ‘-mabi=apcs-gnu’ aarch64-linux-gnu-gcc: note: valid arguments to ‘-mabi=’ are: ilp32 lp64 aarch64-linux-gnu-gcc: error: unrecognized command line option ‘-mapcs’ aarch64-linux-gnu-gcc: error: unrecognized command line option ‘-mno-sched-prolog’ aarch64-linux-gnu-gcc: error: unrecognized command line option ‘-msoft-float’ scripts/Makefile.build:323: recipe for target '/home/lfpm1993/Desktop/teste.o' failed make[2]: *** [/home/lfpm1993/Desktop/teste.o] Error 1 Makefile:1550: recipe for target '_module_/home/lfpm1993/Desktop' failed make[1]: *** [_module_/home/lfpm1993/Desktop] Error 2 make[1]: Leaving directory '/usr/src/linux-headers-4.13.0-45-generic' Makefile:6: recipe for target 'all' failed make: *** [all] Error 2