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_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);
    

    因此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 bottomproduct_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/

    10-13 03:58