写入自定义 nvram 条目

写入自定义 nvram 条目

据我所知,/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_uuidproduct_serial属性中。(该dmidecode工具将显示更多信息。)

通过查看实际的图形设备可以检测图形驱动程序。(Windows 和 Linux 都已经这样工作了 - 它们根据枚举 PCI 总线找到的供应商:产品 ID 加载驱动程序。)

相关内容