Dell BIOS firmware updates on Debian
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:
aptitude install libsmbios-bin libsmbios1 libsmbiosxml1
There are several binaries installed by libsmbios-bin:
dpkg -L libsmbios-bin
/.
/usr
/usr/bin
/usr/sbin
/usr/sbin/activateCmosToken
/usr/sbin/ascii2enUS_scancode
/usr/sbin/assetTag
/usr/sbin/createUnitTestFiles
/usr/sbin/dellBiosUpdate
/usr/sbin/dellLcdBrightness
/usr/sbin/disable_console_redir
/usr/sbin/dumpCmos
/usr/sbin/dumpSmbios
/usr/sbin/getPasswordFormat
/usr/sbin/getSystemId
/usr/sbin/isCmosTokenActive
/usr/sbin/probes
/usr/sbin/propertyTag
/usr/sbin/serviceTag
/usr/sbin/smitest
/usr/sbin/stateByteCtl
/usr/sbin/sysid
/usr/sbin/tokenCtl
/usr/sbin/upBootCtl
/usr/sbin/verifySmiPassword
/usr/sbin/wakeupCtl
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:
getSystemId
Libsmbios: 0.12.1
System ID: 0x01EB
Service Tag: xxx
Express Service Code: xxx
Product Name: PowerEdge SC1435
BIOS Version: 1.0.0
Vendor: Dell Inc.
Is Dell: 1
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/software/bios-hdrs/ and search after our system ID. In my case this returned two bios files:
system_bios_ven_0x1028_dev_0x01eb_version_1.0.0
system_bios_ven_0x1028_dev_0x01eb_version_1.1.2
Note: as you can see these are in the format: system_bios_ven_0×1028_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:
wget http://linux.dell.com/repo/software/bios-hdrs/system_bios_ven_0x1028_dev_0x01eb_version_1.1.2/bios.hdr
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):
modprobe dell_rbu
(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:
lsmod
Module Size Used by
dell_rbu 13088 0
firmware_class 15616 1 dell_rbu
...
And finally we need to run:
dellBiosUpdate -u -f bios.hdr
(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:
dellBiosUpdate -u -f bios.hdr
WARNING: packet updates are not fully tested yet for packet modes v0/v2.
We recommend that only monlithic updates be used at this point.
You should only use packet mode on v0/v2 systems if you know what you are
doing (for example, testing.)
Forcing MONOLITHIC mode...
Supported RBU type for this system: (MONOLITHIC, PACKET)
Using RBU v2 driver. Initializing Driver.
Setting RBU type in v2 driver to: MONOLITHIC (FORCED)
Prep driver for data load.
Writing RBU data (4096bytes/dot): .................................................................................................................................................................................................................................................................
Notify driver data is finished.
Activate CMOS bit to notify BIOS that update is ready on next boot.
Update staged sucessfully. BIOS update will occur on next reboot.
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:
getSystemId
Libsmbios: 0.12.1
System ID: 0x01EB
Service Tag: xxx
Express Service Code: xxx
Product Name: PowerEdge SC1435
BIOS Version: 1.1.2
Vendor: Dell Inc.
Is Dell: 1
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.
Share This








15th September 2007, 20:39
I’m a debian user, and needed upgrading the BIOS.
This is exactly what I needed, and worked great. Thank you!
27th September 2007, 19:53
Exactly the same as said by Kenji.
Very great and deserves better GoogleRank !
4th October 2007, 18:42
Works great under Gutsy Gibbon as well. Thanks for posting this!
24th October 2007, 20:28
Odd question: I’ve used these directions on one machine, and they worked flawlessly. On the other machine, they failed silently (threw a “BIOS update attempt failed!” error. I realized after some hairpulling that the machine that failed has a linux software raid configuration (2 SATA drives), while the machine that worked only has a single drive. Do the Dell SMBios tools know how to locate the file if its embedded in an MD array, or do I have to find an un-raided partition to install it from (which will be a serious pain, since I’ve already partitioned this entirely as MD).
Thanks.
24th October 2007, 22:04
Femi: all I can tell you is that all the systems I have done this were running in a software RAID1 setup (using 2 identical drives - either SCSI or SAS/SATA). I am not sure why this is failing on your system, but it might not be related to the raid configuration. hth.
- Marius -
25th October 2007, 09:29
I had same error (BIOS update attempt failed!) on PE1950 with debian testing version (kernel 2.6.22-2-amd64). Now I am looking for a solution.
7th December 2007, 12:30
[...] http://www.ducea.com/2007/08/27/dell-bios-firmware-updates-on-debian/- Ohjeet Dellien biosin päivittämiseen Debian pohjaista Linuxia käyttäen. [...]
10th May 2008, 06:59
I had the same error on SC1435 with Ubuntu server 8.04 until I forced monolithic mode –force_mono See dellBiosUpdate — help
17th June 2008, 21:29
I had that error occur with a bad cmos battery, during the reboot the bios image is not saved because of the failed battery.