CPUID和MSR读取Linux-x86

时间:2016-11-18 10:27:39

标签: linux-kernel x86-64 cpuid

我在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。

由于

1 个答案:

答案 0 :(得分:0)

除非你已经找到它,否则一个如此受欢迎的实用程序简称为#c; cpuid&#34;并且可以在Fedora中作为rpm包使用,也可以作为Ubuntu包以及其他发行版使用。该实用程序使用&#34; cpuid&#34;指令。

请参阅: http://www.etallen.com/cpuid.html