dir product_uuid
中有product_serial
和/sys/class/dmi/id/
文件。
最佳答案
这些值是在内核代码中生成的。您可以在内核源目录中使用git grep
命令(带有您感兴趣的关键字)来轻松找到它们:
$ git grep --all-match -n -e '\bdmi\b' -e product_uuid -e product_serial
因此,在drivers/firmware/dmi-id.c中创建了
product_uuid
和product_serial
sysfs节点:DEFINE_DMI_ATTR_WITH_SHOW(product_serial, 0400, DMI_PRODUCT_SERIAL);
DEFINE_DMI_ATTR_WITH_SHOW(product_uuid, 0400, DMI_PRODUCT_UUID);
从
DEFINE_DMI_ATTR_WITH_SHOW
定义中,您可以看到这两个属性都是通过sys_dmi_field_show()
函数访问的,该函数依次调用dmi_get_system_info()
,该函数仅从dmi_ident
数组返回相应的元素。该表在dmi_decode()
例程中填充:dmi_save_ident(dm, DMI_PRODUCT_SERIAL, 7);
dmi_save_uuid(dm, DMI_PRODUCT_UUID, 8);
因此dmi_save_uuid()是在dmi_save_ident()函数中生成的。只需阅读其代码即可了解其操作方式。
product_uuid
是在SMBIOS specification函数中生成的。归结为这样的代码:(struct dmi_header *)(dmi_base)[7];
其中
product_serial
是DMI表的地址(显然已重映射到虚拟内存),而dmi_base
对应于7
常量。为了更好地理解这一点,请参见SMBIOS specification,特别是
DMI_PRODUCT_SERIAL
,它对应于以下命令:# dmidecode --type 1
至于
Table 9 – System Information (Type 1) Structure
-看on the bottom的product_uuid
部分。它具有说明以及该数字各部分说明的表格。使用该表,您可以解码您的UUID并从中提取一些信息,例如时间戳等。至于
7.2.1 System - UUID
-我相信这是不言自明的,它只是设备的序列号。通常,您可以在计算机的某些标签上找到打印的标签。例如,对于我的笔记本电脑,它是sysfs。这是我在product_serial
中看到的字符串。这些文件实际上不是真实文件,而只是内核功能的接口(interface)。了解有关DMI table的详细信息。因此,为了“更改”这些文件,您需要相应地编辑提到的内核文件,然后重建整个内核并启动它(而不是您的发行版提供的一个)。
另外,正如@ ChristopheVu-Brugier在评论中提到的那样,您可以在DMI表中更改这些值(尽管有些棘手)。但是我不推荐它。这些值肯定具有一定的意义,并且在某些情况下可能有用(如果不是对您而言,则对PC中的某些软件而言)。
这些值实际上是从ojit_a获得的,该文件与BIOS一起被硬编码到永久存储器(主板上带有BIOS的闪存芯片)中,您只需使用内核功能通过读取这些文件从此DMI表中读取这些值。
关于linux - DMIDecode product_uuid和product_serial。有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35883313/