2016-11-18 102 views
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。

感谢

+0

使用CPUID包装的功能,如果你不内联汇编自己明白。有几种可供选择。 –

+0

@ Peter Cordes。感谢那... – vitamike

+1

可能重复[Intel处理器:“如果CPUID.06H:EAX。[[7]] = 1”含义?](https://stackoverflow.com/questions/45883852/intel-processor- if-cpuid-06heax-7-1-meaning),这也是一个linux内核问题,答案显示Linux的CPUID包装函数 –

回答

0

除非你已经发现了它,这样一种常见的实用工具简单地称为“CPUID”,可作为rpm软件包的Fedora和作为Ubuntu的软件包以及在其他发行版。该实用程序使用“cpuid”指令。

参见: http://www.etallen.com/cpuid.html