我在Linux内核模块上工作,我需要读取处理器的CPUID以查看是否存在某个功能。芯片组文档说明:
"当CPUID(EAX = 14H,ECX = 0):ECX [bit 0]或CPUID。(EAX = 14H,ECX = 0)时,支持对此MSR的访问:ECX [bit2]&# 34;
但是我使用以下代码来读取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 :(得分:0)
除非你已经找到它,否则一个如此受欢迎的实用程序简称为#c; cpuid&#34;并且可以在Fedora中作为rpm包使用,也可以作为Ubuntu包以及其他发行版使用。该实用程序使用&#34; cpuid&#34;指令。