在linux中,有这么一个宏用来获取当前代码处于哪个核:
#define read_cpuid(reg) \
({ \
unsigned int __val;\
asm("mrc
p15, 0, %0, c0, c0, " __stringify(reg) \
: "=r" (__val)\
: \
: "cc");
\
__val;
\
})
mrc p15, 0, 5, c0, c0
是从cp15中,读取处理器ID。在SMP中,每个核都有独立的寄存器,所以不同的核心运行这段获取处理器ID代码得到的值不一样。具体的可以看cotex-a9的文档。