如何使用 CPUID 查找主板信息?

Posted

技术标签:

【中文标题】如何使用 CPUID 查找主板信息?【英文标题】:How to find motherboard info using CPUID? 【发布时间】:2011-10-03 16:30:01 【问题描述】:

我正在尝试开发一个 C 函数来获取一些主板信息(名称、ID 等),但我找不到这些信息的存储位置。我查看了 CPUID,但在那里找不到与主板相关的任何信息(尽管有很多关于 CPU 的信息)。

有谁知道我可以从哪里获得这些信息?

非常感谢。

【问题讨论】:

除非您尝试创建可启动的应用程序并直接访问硬件,否则我们需要知道将运行您的应用程序的操作系统 这只是一个可启动的二进制文件 @limp,所以您是直接从引导加载程序启动,而不是从 Windows 等启动? 【参考方案1】:

CPUID 返回有关 CPU 本身的信息(因此得名);它不返回有关主板的信息。您的操作系统可能会通过某种方式查询 ACPI 数据,这些数据可能(如果主板制造商愿意记录此类信息)有您正在寻找的信息;但是,执行此操作的确切方法取决于您的操作系统。

如果您正在对裸机进行编码,您的第一站是ACPI tables。特别感兴趣的可能是 DSDT 中的 OEMID 和 OEM Table ID;您也可以在其他地方找到模型信息。但是请注意,Bios 往往是full of interesting bugs,并且不能保证制造商已经填写了启动 Windows 并非绝对必要的任何内容。

非 ACPI 系统通常已过时,至少对于 PC 硬件而言。如果您使用的是非 ACPI 系统,那么祝您好运。非 ACPI 系统上的主板识别信息没有标准化的位置。您可以尝试探测硬件并根据已知硬件配置文件表进行猜测,但这是您能做的最好的事情。

【讨论】:

+1:同意。将获得此信息的是主板固件,并且必须使用适当的接口进行查询。 这有点含糊。例如,CPU-Z 如何获取此信息?如果这是 ACPI,哪个表有它(但是,非 ACPI 系统会发生什么)? @limp,就像我说的,在给出任何具体建议之前,我们需要您的操作系统。检索硬件信息的具体方法取决于操作系统。【参考方案2】:

我将从 dmidecode 源及其引用的标准 (SMBIOS/DMI) 开始。

【讨论】:

以上是关于如何使用 CPUID 查找主板信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 CPUID 命令使用 C/C++ 获取物理和虚拟地址位

__get_cpuid 的可移植性如何?

如何使用 CPUID 指令正确获取 x86 CPU 功能? [复制]

如何在 gcc 中检测 CPU id

如何使用 cpuid 获取 TLB 页面大小

如何使用 __cpuid 检查 AES-NI 支持?