Dell 远程 BIOS 更新驱动程序 (dell_rbu)

目的

本文档演示了如何使用 Dell 远程 BIOS 更新驱动程序来更新 Dell 服务器和台式机上的 BIOS 映像。

范围

本文档仅讨论 rbu 驱动程序的功能。它不涵盖应用程序为使 BIOS 能够使用下载到内存中的映像自行更新所需的辅助支持。

概述

该驱动程序可与 Dell OpenManage 或 Dell 更新包配合使用,以更新 Dell 服务器(适用于 1999 年以来销售的服务器)、台式机和笔记本电脑(适用于 2005 年以来销售的产品)上的 BIOS。

请前往 http://support.dell.com 注册,您可以在该网站找到有关 OpenManage 和 Dell 更新包 (DUP) 的信息。

Libsmbios 也可用于更新 Dell 系统上的 BIOS,详情请访问 https://linux.dell.com/libsmbios/

Dell_RBU 驱动程序支持使用单体式 (monolithic) 映像和分组式 (packetized) 映像方法进行 BIOS 更新。对于单体式方法,驱动程序会分配一块包含 BIOS 映像的连续物理页。对于分组式方法,使用该驱动程序的应用程序会将映像分解为固定大小的数据包,驱动程序会将每个数据包放置在连续的物理内存中。驱动程序还维护一个用于读回这些数据包的链表。

如果卸载 dell_rbu 驱动程序,所有已分配的内存都将被释放。

rbu 驱动程序需要一个应用程序(如上所述)来通知 BIOS 在下一次系统重启时启用更新。

用户在下载 BIOS 映像或进行更新后,不应卸载 rbu 驱动程序。

驱动程序加载会在 /sys 文件系统下创建以下目录

/sys/class/firmware/dell_rbu/loading
/sys/class/firmware/dell_rbu/data
/sys/devices/platform/dell_rbu/image_type
/sys/devices/platform/dell_rbu/data
/sys/devices/platform/dell_rbu/packet_size

该驱动程序支持两种更新机制:单体式和分组式。这些更新机制取决于系统当前运行的 BIOS。大多数 Dell 系统支持单体式更新,即将 BIOS 映像复制到单个连续的物理内存块中。

在分组机制中,单个内存块可以被分解为较小的连续内存块,BIOS 映像分散在这些数据包中。

默认情况下,驱动程序使用单体式内存进行更新。这可以在驱动程序加载时通过指定加载参数 image_type=packet 更改为分组式。也可以稍后按如下方式进行更改

echo packet > /sys/devices/platform/dell_rbu/image_type

在分组更新模式下,必须在下载任何数据包之前指定数据包大小。操作如下

echo XXXX > /sys/devices/platform/dell_rbu/packet_size

在分组更新机制中,用户需要创建一个新文件,其中包含背对背排列的数据包。具体操作如下:用户创建数据包头部,获取 BIOS 映像块并将其放在 packetheader(数据包头部)旁边;现在,packetheader + BIOS 映像块相加应等于指定的 packet_size。这就构成了一个数据包,用户需要从整个 BIOS 映像文件中创建更多此类数据包,然后将所有这些数据包背对背排列成一个单独的文件。

然后将此文件复制到 /sys/class/firmware/dell_rbu/data。一旦驱动程序接收到该文件,它就会从文件中提取 packet_size 大小的数据,并将其分散到物理内存中连续的 packet_sized 大小的空间内。

这种方法确保所有数据包都能通过一次操作传输给驱动程序。

在单体式更新中,用户只需获取 BIOS 映像(.hdr 文件)并将其直接复制到数据文件中,而无需对 BIOS 映像本身进行任何更改。

执行以下步骤以下载 BIOS 映像。

  1. echo 1 > /sys/class/firmware/dell_rbu/loading

  2. cp bios_image.hdr /sys/class/firmware/dell_rbu/data

  3. echo 0 > /sys/class/firmware/dell_rbu/loading

在完成以下操作之前,/sys/class/firmware/dell_rbu/ 条目将保持存在。

echo -1 > /sys/class/firmware/dell_rbu/loading

在完成此步骤之前,无法卸载驱动程序。

此外,向 image_type 写入 mono、packet 或 init 也会释放驱动程序分配的内存。

如果用户在未执行第 2 步的情况下意外执行了上述第 1 步和第 3 步,/sys/class/firmware/dell_rbu/ 条目将会消失。

可以通过执行以下操作重新创建这些条目

echo init > /sys/devices/platform/dell_rbu/image_type

注意

向 image_type 写入 init 不会改变其原始值。

此外,驱动程序还提供 /sys/devices/platform/dell_rbu/data 只读文件,用于读回已下载的映像。

注意

更新 BIOS 映像后,用户模式应用程序需要执行代码,向 BIOS 发送 BIOS 更新请求。这样在下次重启时,BIOS 就能识别出已下载的新映像并进行自我更新。此外,如果需要更新映像,请勿卸载 rbu 驱动程序。