目录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_uuid
和product_serial
个文件。
答案 0 :(得分:7)
如何生成?
这些值是在内核代码中生成的。您可以在内核源目录中使用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);
例程:
product_uuid
因此在dmi_save_uuid()函数中生成了product_serial
。只需阅读其代码即可了解它是如何完成的。
(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 specification,product_serial
部分。它有描述,也有这个数字的每个部分的解释表。使用该表,您可以解码UUID并从中提取一些信息,如时间戳等。
至于/sys/class/dmi/id/product_serial
- 我相信它不言自明,它只是您设备的序列号。您通常可以在计算机上的贴纸上找到它。例如,对于我的笔记本电脑,on the bottom。它与我在double
中看到的字符串相同。
我可以更改此文件吗?
这些文件实际上不是真正的文件,只是内核函数的接口。有关详细信息,请阅读sysfs。所以为了改变"那些你需要相应编辑提到的内核文件的文件,然后重建整个内核并启动它(而不是你的发行版提供的内核)。
另外,正如@ChristopheVu-Brugier在评论中提到的那样,您可以在DMI表中更改这些值(尽管有些棘手)。但我不推荐它。这些值肯定有一定的含义,在某些情况下可能有用(如果没有,那么对于PC中的某些软件)。
重新安装操作系统后是否保存值?
这些值实际上是从DMI table获得的,它与BIOS一起硬编码到永久存储器(主板上带有BIOS的闪存芯片),你只需通过读取这些文件,使用内核函数从这个DMI表中读取这些值