0
林中,我需要读取的处理器的CPUID以查看是否有特征是存在一个Linux内核模块上工作。芯片组文档指出:CPUID和MSR读取的Linux 86
“当CPUID(EAX = 14H,ECX = 0):ECX [bit 0]或CPUID。(EAX = 14H,ECX = 0):ECX [bit2 ]”
但是我使用下面的代码读取CPUID:
int func()
{
int a, b;
for (a = 0; a < 5; a++)
{
__asm__("cpuid"
:"=a"(b) // EAX into b (output)
:"0"(a) // a into EAX (input)
:"%ebx","%ecx","%edx"); // clobbered registers
printk("The code %i gives %llx\n", a, b);
}
return 0;
}
摘自:https://en.wikipedia.org/wiki/CPUID#EAX.3D1:_Processor_Info_and_Feature_Bits
,但我不知道它是如何工作或值我读。有人可以向我解释这段代码是如何工作的,以及我如何去读取上面的CPUID寄存器以及EAX = 80000008h。
感谢
使用CPUID包装的功能,如果你不内联汇编自己明白。有几种可供选择。 –
@ Peter Cordes。感谢那... – vitamike
可能重复[Intel处理器:“如果CPUID.06H:EAX。[[7]] = 1”含义?](https://stackoverflow.com/questions/45883852/intel-processor- if-cpuid-06heax-7-1-meaning),这也是一个linux内核问题,答案显示Linux的CPUID包装函数 –