forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
4.9 KiB
128 lines
4.9 KiB
========================================= |
|
Dell Remote BIOS Update driver (dell_rbu) |
|
========================================= |
|
|
|
Purpose |
|
======= |
|
|
|
Document demonstrating the use of the Dell Remote BIOS Update driver |
|
for updating BIOS images on Dell servers and desktops. |
|
|
|
Scope |
|
===== |
|
|
|
This document discusses the functionality of the rbu driver only. |
|
It does not cover the support needed from applications to enable the BIOS to |
|
update itself with the image downloaded in to the memory. |
|
|
|
Overview |
|
======== |
|
|
|
This driver works with Dell OpenManage or Dell Update Packages for updating |
|
the BIOS on Dell servers (starting from servers sold since 1999), desktops |
|
and notebooks (starting from those sold in 2005). |
|
|
|
Please go to http://support.dell.com register and you can find info on |
|
OpenManage and Dell Update packages (DUP). |
|
|
|
Libsmbios can also be used to update BIOS on Dell systems go to |
|
https://linux.dell.com/libsmbios/ for details. |
|
|
|
Dell_RBU driver supports BIOS update using the monolithic image and packetized |
|
image methods. In case of monolithic the driver allocates a contiguous chunk |
|
of physical pages having the BIOS image. In case of packetized the app |
|
using the driver breaks the image in to packets of fixed sizes and the driver |
|
would place each packet in contiguous physical memory. The driver also |
|
maintains a link list of packets for reading them back. |
|
|
|
If the dell_rbu driver is unloaded all the allocated memory is freed. |
|
|
|
The rbu driver needs to have an application (as mentioned above) which will |
|
inform the BIOS to enable the update in the next system reboot. |
|
|
|
The user should not unload the rbu driver after downloading the BIOS image |
|
or updating. |
|
|
|
The driver load creates the following directories under the /sys file system:: |
|
|
|
/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 |
|
|
|
The driver supports two types of update mechanism; monolithic and packetized. |
|
These update mechanism depends upon the BIOS currently running on the system. |
|
Most of the Dell systems support a monolithic update where the BIOS image is |
|
copied to a single contiguous block of physical memory. |
|
|
|
In case of packet mechanism the single memory can be broken in smaller chunks |
|
of contiguous memory and the BIOS image is scattered in these packets. |
|
|
|
By default the driver uses monolithic memory for the update type. This can be |
|
changed to packets during the driver load time by specifying the load |
|
parameter image_type=packet. This can also be changed later as below:: |
|
|
|
echo packet > /sys/devices/platform/dell_rbu/image_type |
|
|
|
In packet update mode the packet size has to be given before any packets can |
|
be downloaded. It is done as below:: |
|
|
|
echo XXXX > /sys/devices/platform/dell_rbu/packet_size |
|
|
|
In the packet update mechanism, the user needs to create a new file having |
|
packets of data arranged back to back. It can be done as follows: |
|
The user creates packets header, gets the chunk of the BIOS image and |
|
places it next to the packetheader; now, the packetheader + BIOS image chunk |
|
added together should match the specified packet_size. This makes one |
|
packet, the user needs to create more such packets out of the entire BIOS |
|
image file and then arrange all these packets back to back in to one single |
|
file. |
|
|
|
This file is then copied to /sys/class/firmware/dell_rbu/data. |
|
Once this file gets to the driver, the driver extracts packet_size data from |
|
the file and spreads it across the physical memory in contiguous packet_sized |
|
space. |
|
|
|
This method makes sure that all the packets get to the driver in a single operation. |
|
|
|
In monolithic update the user simply get the BIOS image (.hdr file) and copies |
|
to the data file as is without any change to the BIOS image itself. |
|
|
|
Do the steps below to download the BIOS image. |
|
|
|
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 |
|
|
|
The /sys/class/firmware/dell_rbu/ entries will remain till the following is |
|
done. |
|
|
|
:: |
|
|
|
echo -1 > /sys/class/firmware/dell_rbu/loading |
|
|
|
Until this step is completed the driver cannot be unloaded. |
|
|
|
Also echoing either mono, packet or init in to image_type will free up the |
|
memory allocated by the driver. |
|
|
|
If a user by accident executes steps 1 and 3 above without executing step 2; |
|
it will make the /sys/class/firmware/dell_rbu/ entries disappear. |
|
|
|
The entries can be recreated by doing the following:: |
|
|
|
echo init > /sys/devices/platform/dell_rbu/image_type |
|
|
|
.. note:: echoing init in image_type does not change its original value. |
|
|
|
Also the driver provides /sys/devices/platform/dell_rbu/data readonly file to |
|
read back the image downloaded. |
|
|
|
.. note:: |
|
|
|
After updating the BIOS image a user mode application needs to execute |
|
code which sends the BIOS update request to the BIOS. So on the next reboot |
|
the BIOS knows about the new image downloaded and it updates itself. |
|
Also don't unload the rbu driver if the image has to be updated. |
|
|
|
|