在Linux中获取处理器ID

时间:2013-12-01 09:23:27

标签: linux windows wmi processor

在Microsoft Windows上,您可以通过WMI获取处理器ID(非进程ID),WMI基于此情况(仅在获取处理器ID时)在CPUID指令上 是否有类似的方法在Linux上获取此ID?

2 个答案:

答案 0 :(得分:1)

我不知道WMI是什么和MS-Windows“CPUID指令”,因为我不知道或使用MS-Windows(这里的用户很少)。所以我不能肯定地说这是否提供相同的信息,但试试cat /proc/cpuinfo。如果您需要特定值,则可以轻松grep

如果您需要在程序中执行此操作,则可以使用文件utils来读取此类信息。始终牢记“unix”风格操作系统的最基本原则之一:一切都是文件

答案 1 :(得分:1)

对于OP问题的上下文,WMI返回的ProcessorID值为documented因此:

  

描述处理器功能的处理器信息。为   x86类CPU,字段格式取决于处理器的支持   CPUID指令。如果指令受支持,则属性   包含2(两)个DWORD格式的值。第一个是偏移量   08h-0Bh,这是CPUID指令返回的EAX值   输入EAX设置为1.第二个是0Ch-0Fh的偏移量,即   指令返回的EDX值。只有前两个字节   属性很重要,包含DX的内容   在CPU复位时注册 - 所有其他都设置为0(零)和内容   是DWORD格式。

例如,在我的系统上:

C:\>wmic path Win32_Processor get ProcessorId
ProcessorId
BFEBFBFF000206A7

请注意,ProcessorID只是一种二进制编码格式的信息,通常以其他格式提供,特别是签名(族/模型/步进/处理器类型)和功能标记。如果您只需要这些信息,则可能实际上并不需要此ID - 只需从/proc/cpuinfo获取已解码的信息。

如果你真的想要这8个字节,有几种方法可以在Linux中获取ProcessorID。

使用root / sudo时,ID包含在dmidecode

的输出中
<snip>
Handle 0x0004, DMI type 4, 35 bytes
Processor Information
    Socket Designation: CPU Socket #0
    Type: Central Processor
    Family: Other
    Manufacturer: GenuineIntel
    ID: A7 06 02 00 FF FB EB BF
<snip>

请注意,字节顺序是相反的:Windows以Big-Endian顺序返回结果,而Linux以Little-Endian顺序返回它们。

如果您没有root权限,则几乎可以通过二进制编码它返回的值从/proc/cpuinfo重建ProcessorID。对于&#34;签名&#34; (Windows中的前四个字节/ Linux中的前四个字节)您可以对从/proc/cpuinfo提取的标识进行二进制编码,以符合Intel Documentation图5-2(其他制造商使用它来实现兼容性)。 / p>

  • 步进位于第3-0位
  • 模型位于第19-16位和第7-4位
  • 家庭位于27-20和11-8位
  • 处理器类型位于第13-12位(/proc/cpuinfo没有告诉您这一点,假设为0)

类似地,您可以通过迭代flags中的功能标志(/proc/cpuinfo)并根据上面链接的英特尔文档的表5-5设置适当的位来填充剩余的四个字节。 / p>

最后,您可以安装cpuid包(例如,在Ubuntu上,sudo apt-get install cpuid)。然后通过运行cpuid -r(raw)命令,您可以解析其输出。您可以将EAX和EDX寄存器中的值组合起来,使初始EAX值为1:

$ cpuid -r
CPU 0:
   0x00000000 0x00: eax=0x0000000d ebx=0x756e6547 ecx=0x6c65746e edx=0x49656e69
   0x00000001 0x00: eax=0x000206a7 ebx=0x00020800 ecx=0x9fba2203 edx=0x1f8bfbff
<snip>