【问题标题】:CPUID and MSR reads Linux-x86CPUID 和 MSR 读取 Linux-x86
【发布时间】:2017-04-02 03:54:51
【问题描述】:

我正在开发一个 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。

谢谢

【问题讨论】:

  • 如果您自己不了解内联汇编,请使用 CPUID 包装函数。有几个可供选择。
  • @彼得·科德斯。谢谢你...
  • Intel Processor : "If CPUID.06H:EAX.[7] = 1" Meaning?的可能重复,这也是一个linux-kernel问题,答案显示了Linux的CPUID wrapper函数

标签: linux-kernel x86-64 cpuid


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-05-02
    • 1970-01-01
    • 2020-04-30
    • 2014-05-30
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多