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包裝函數 –