2016-11-18 51 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