If you need to upgrade the bios firmware of a Dell system (to fix some bugs or add some enhancements, etc.) and you are not running Windows or RHEL (the systems Dell is officially supporting and providing upgrading solutions) there is still hope. I used to manage some Dell’s running RHEL and I loved how easy it was to run all the firmware updates released by Dell for RHEL. I always hoped that there will be some a solution for Debian also. And the solution exists, and I will exemplify it bellow by updating the bios of a Dell PowerEdge SC1435 system.
NOTE: as always when doing things like BIOS upgrade be extremely careful and don’t proceed with it if you are not sure what (or why) you are doing it. If something wrong happens and the BIOS update is broken it can make your system unusable. If unsure, check with your Dell support representative before doing this.
Ok, here is the summary of the actions needed:
- we need the libsmbios package installed
- we need to get the bios update file
- we will perform the update and reload the system for this to take place.
1. Install the libsmbios package.
This step is easy as it is packaged in the debian repository and we can install it with:
There are several binaries installed by libsmbios-bin:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
We will be using getSystemId to get the system ID and dellBiosUpdate to perform the actual update.
2. Download the BIOS update file
We can see in the Dell support site that there is a new bios update version, but the files are not in the format we need… We first need to find out the system id. For this we run getSystemID and the output in my example is:
1 2 3 4 5 6 7 8 9
We can also see the running bios version. In this case it is v1.0.0 that is quite old and as we can see in the Dell support site there is a newer version 1.1.2 released on 4/10/2007 that brings some significant improvements. Now where can we find the bios update file in a format we can actually use? We have go to http://linux.dell.com/repo/firmware/bios-hdrs/ and search after our system ID. In my case this returned two bios files:
Note: as you can see these are in the format: system_bios_ven_0x1028_dev_SYSTEM_ID_version_BIOS_VERSION. You need to have the proper system ID for this (not sure what would happen if you try with a different system bios as I was not curious enough to try this out :–) ).
From the appropriate folder download the bios.hdr file. In my case this was:
3. Perform the BIOS update
We will need first to load a kernel module (dell_rbu) that is required by libsmbios for BIOS updates. This exists in debian default kernels (if you are running a vanilla kernel you only need to compile it as a module as it is included in the standard linux kernel starting with Linux 2.6.14):
(you will not see any output if all is ok). You can check if this was really successful by running lsmod and you should see the module loaded:
1 2 3 4 5
And finally we need to run:
(this from the location you downloaded the bios.hdr file; else add the full path to the bios.hdr file)
The output will look like:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
That’s it. You need to reboot your system in order to complete this. Once the system is rebooted it will first perform the bios update and then continue to load the system.
After the reboot my example system was showing:
1 2 3 4 5 6 7 8 9
Conclusion: hopefully other debian/ubuntu users will find this information useful while running Debian on Dell systems. Personally, I have seen one other method described by Felix Schwarz in his doc “Flashing a Dell Bios with Linux)” but this will require to boot using a boot floppy image to flash the bios and normally this will require direct access to the system or at least a remote console. The above method can be performed remotely and doesn’t require anything special besides a ssh connection.