DMIDecode product_uuid和product_serial.what有什么区别?

时间:2016-03-09 05:05:38

标签: linux linux-kernel

目录var str = "abc"; var str2 = str.split(" ").join("").split(""); var tmp = str2; console.log(str2); // => ['a','b','c'] console.log(tmp.reverse()); // => ['c','b','a'] console.log(str2); // => ['c','b','a'] 中有product_uuidproduct_serial个文件。

  1. 如何生成?有什么不同?
  2. 我可以更改此文件吗?
  3. 重新安装操作系统后是否保存值?

1 个答案:

答案 0 :(得分:7)

  

如何生成?

这些值是在内核代码中生成的。您可以在内核源目录中使用git grep命令(包含您感兴趣的关键字)轻松找到它们:

$ git grep --all-match -n -e '\bdmi\b' -e product_uuid -e product_serial

因此,在drivers/firmware/dmi-id.c中创建了product_uuidproduct_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); 例程:

product_uuid

因此在dmi_save_uuid()函数中生成了product_serial。只需阅读其代码即可了解它是如何完成的。

dmi_save_ident()函数中生成

(struct dmi_header *)(dmi_base)[7]; 。归结为这样的代码:

dmi_base

其中7是DMI表的地址(显然重新映射到虚拟内存),DMI_PRODUCT_SERIAL对应Table 9 – System Information (Type 1) Structure常量。

为了更好地理解这一点,请参阅SMBIOS specification,特别是# dmidecode --type 1 ,该命令对应于此命令:

product_uuid
  

有什么区别?

至于7.2.1 System - UUID - 请查看SMBIOS specificationproduct_serial部分。它有描述,也有这个数字的每个部分的解释表。使用该表,您可以解码UUID并从中提取一些信息,如时间戳等。

至于/sys/class/dmi/id/product_serial - 我相信它不言自明,它只是您设备的序列号。您通常可以在计算机上的贴纸上找到它。例如,对于我的笔记本电脑,on the bottom。它与我在double中看到的字符串相同。

  

我可以更改此文件吗?

这些文件实际上不是真正的文件,只是内核函数的接口。有关详细信息,请阅读sysfs。所以为了改变"那些你需要相应编辑提到的内核文件的文件,然后重建整个内核并启动它(而不是你的发行版提供的内核)。

另外,正如@ChristopheVu-Brugier在评论中提到的那样,您可以在DMI表中更改这些值(尽管有些棘手)。但我不推荐它。这些值肯定有一定的含义,在某些情况下可能有用(如果没有,那么对于PC中的某些软件)。

  

重新安装操作系统后是否保存值?

这些值实际上是从DMI table获得的,它与BIOS一起硬编码到永久存储器(主板上带有BIOS的闪存芯片),你只需通过读取这些文件,使用内核函数从这个DMI表中读取这些值