0

我正在研究一个 Linux 内核模块,我需要在其中读取处理器的 CPUID 以查看是否存在某个功能。芯片组文档指出:

“当 CPUID (EAX=14H, ECX=0):ECX[bit 0] 或 CPUID.(EAX=14H, ECX=0):ECX[bit2] 时支持访问此 MSR”

但是我正在使用以下代码来读取 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。

谢谢

4

1 回答 1

0

除非您已经找到它,否则这样一个流行的实用程序简称为“cpuid”,它在 Fedora 和 Ubuntu 包以及其他发行版中以 rpm 包的形式提供。该实用程序使用“cpuid”指令。

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

于 2016-11-19T10:16:43.363 回答