据我所知,/dev/nvram
包含 BIOS 或 UEFI 配置,可以通过阅读来查看/proc/driver/nvram
。我想知道是否可以将我自己的自定义条目写入 nvram。
我想要实现的目标:
我从便携式磁盘运行 Archlinux,该磁盘可用于我的工作站、笔记本电脑等。我想编写一个包含数字(或如果可能的话是一个字符串)的条目,以便我的便携式系统能够检测正在启动的计算机,例如加载不同的配置(例如图形驱动程序或多显示器设置)。我希望识别基于主板。
答案1
据我所知,/dev/nvram 包含 BIOS 或 UEFI 配置,可以通过读取 /proc/driver/nvram 来查看。我想知道是否可以将我自己的自定义条目写入 nvram。
“nvram”设备实际上提供了 RTC(实时时钟)内存的内容,该内存在 IBM PC 早期用于存储 BIOS 设置。该驱动程序似乎仅适用于 BIOS 系统(而非 UEFI),如今它与存储实际设置的实际 NVRAM 没有任何关系 - 固定的 114 字节结构是为了与 MS-DOS 兼容而保留的遗留物。虽然您可以尝试写入它,但我不希望保留任何其他信息。
通常在 BIOS 系统中,没有其他可供操作系统访问的可写存储空间(除非您找到特定于制造商的内容)。
在 UEFI 系统中,是通用 NVRAM,可通过“EFI 变量”访问,Linux 通过 公开/sys/firmware/efi/efivars
。您可以创建自定义 EFI 变量,一些程序已经这样做了,例如,您会发现 systemd-boot 创建了一些变量。如果您想这样做,最好使用该efivar
工具(还有efibootmgr
专门用于 Boot#### 变量的工具)。
然而,EFI NVRAM 的容量是有限的,如果 NVRAM 更新次数过多,一些较旧的 PC(大约 5-6 年前)可能会变得无法使用。
我从便携式磁盘运行 Archlinux,该磁盘可用于我的工作站、笔记本电脑等。我想编写一个包含数字(或如果可能的话是一个字符串)的条目,以便我的便携式系统能够检测正在启动的计算机,例如加载不同的配置(例如图形驱动程序或多显示器设置)。我希望识别基于主板。
传统的方式是使用设备内置以太网端口的MAC地址。
那里可能是主板在 DMI 信息中的唯一 ID,可通过 获得/sys/devices/virtual/dmi/id/*
,通常在product_uuid
和product_serial
属性中。(该dmidecode
工具将显示更多信息。)
通过查看实际的图形设备可以检测图形驱动程序。(Windows 和 Linux 都已经这样工作了 - 它们根据枚举 PCI 总线找到的供应商:产品 ID 加载驱动程序。)