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/firmware/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/firmware/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.
>







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.
12th November 2008, 15:20
[...] Dell BIOS firmware updates on Debian | MDLog:/sysadmin [...]
18th November 2008, 06:42
Hi!
Thank you for an excellent guide. This has been really helpful to me several times as we run Debian on all our servers. I just wanted to inform you and everyone else in need of this guide, that the url for downolading the .hrds has changed. New location is:
http://linux.dell.com/repo/firmware/bios-hdrs/
(That is software has changed for firmware). Otherwise, still working perfectly!
.øs
18th November 2008, 15:11
@Øystein: thank you for your note. I have updated the post with the proper url for the bios hdrs.
Thanks,
- Marius -
17th January 2009, 01:21
Thanks very much for posting this. Very helpful!
18th January 2009, 19:18
Does anybody know how to upgrade the DRAC firmware on PowerEdge servers on Ubuntu?
22nd January 2009, 06:38
I’ve tried these instructions on my PowerEdge 2550 (old I know) and everything seems to go OK, but when I go to reboot, the system just hangs indefinitely. When I power cycle the machine, it comes back just fine, but running the same old BIOS. Any help would be greatly appreciated!
22nd January 2009, 12:14
@Pickard: you can upgrade your DRAC firmware from the Drac web interface itself, regardless on the OS running on your system. Still, if you prefer you can also do this using the command line, by ssh-ing to the drac and using “racadm fwupdate“, like:
racadm fwupdate -g -u - a <tftp_server_ip> -d <path>(but you will need a tftp server to upload the image); for more details you can check the dell docs.@George Qualley IV: does it show any error on the console after you reboot it? that could tell you what is happening. If not, maybe someone with a similar system might be able to help, as unfortunately I don’t have such a system onhand.
22nd January 2009, 12:59
@Marius: Thank you for your answer! I’ve tried to upgrade the firmware through the web interface, but something went wrong and since then I’m unable to reach the web-interface nor the ssh of the DRAC
There is a message during the BIOS boot process: Unsupported Processor. Please upgrade the BMC firmware. (or something like this).
What can I do now?
22nd January 2009, 13:20
@Pickard: no idea… You should probably try to speak with Delll support and see what they suggest; if I were you, I would try to upgrade the BMC firmware, but from what I have seen (just google it) this can be tricky on debian and might even brick your system if not careful…
Good luck with that and sorry I can’t help you with something else on this, as I haven’t seen such issues in the past.
- Marius -
22nd January 2009, 18:32
Marius, thank you for your time. What follows is my syslog over a reboot:
Jan 21 22:17:44 localhost NetworkManager: ^IDeactivating device eth1.
Jan 21 22:17:45 localhost afpd[3161]: shutting down on signal 15
Jan 21 22:17:45 localhost mysqld[2844]: 090121 22:17:45 [Note] /usr/sbin/mysqld: Normal shutdown
Jan 21 22:17:45 localhost mysqld[2844]:
Jan 21 22:17:45 localhost mysqld[2844]: 090121 22:17:45 InnoDB: Starting shutdown…
Jan 21 22:17:46 localhost mysqld[2844]: 090121 22:17:46 InnoDB: Shutdown completed; log sequence number 0 43655
Jan 21 22:17:46 localhost mysqld[2844]: 090121 22:17:46 [Note] /usr/sbin/mysqld: Shutdown complete
Jan 21 22:17:46 localhost mysqld[2844]:
Jan 21 22:17:46 localhost mysqld_safe[3829]: ended
Jan 21 22:17:47 localhost ntpd[3290]: ntpd exiting on signal 15
Jan 21 22:17:48 localhost kernel: dahdi: Telephony Interface Unloaded
Jan 21 22:17:48 localhost rpc.statd[3251]: Caught signal 15, un-registering and exiting.
Jan 21 22:17:48 localhost kernel: Kernel logging (proc) stopped.
Jan 21 22:17:48 localhost kernel: Kernel log daemon terminating.
Jan 21 22:17:49 localhost exiting on signal 15
Jan 21 22:23:38 localhost syslogd 1.4.1#18: restart.
Jan 21 22:23:38 localhost kernel: klogd 1.4.1#18, log source = /proc/kmsg started.
Jan 21 22:23:38 localhost kernel: Linux version 2.6.18-6-686 (Debian 2.6.18.dfsg.1-23etch1) (dannf@debian.org) (gcc version 4.1.2 200$
Jan 21 22:23:38 localhost kernel: BIOS-provided physical RAM map:
Jan 21 22:23:38 localhost kernel: BIOS-e820: 0000000000000000 - 00000000000a0000 (usable)
Jan 21 22:23:38 localhost kernel: BIOS-e820: 0000000000100000 - 000000001fff0000 (usable)
Jan 21 22:23:38 localhost kernel: BIOS-e820: 000000001fff0000 - 000000001fffec00 (ACPI data)
Jan 21 22:23:38 localhost kernel: BIOS-e820: 000000001fffec00 - 000000001ffff000 (reserved)
Jan 21 22:23:38 localhost kernel: BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved)
Jan 21 22:23:38 localhost kernel: BIOS-e820: 00000000fee00000 - 00000000fee10000 (reserved)
Jan 21 22:23:38 localhost kernel: BIOS-e820: 00000000fff80000 - 0000000100000000 (reserved)
Jan 21 22:23:38 localhost kernel: 0MB HIGHMEM available.
Jan 21 22:23:38 localhost kernel: 511MB LOWMEM available.
Jan 21 22:23:38 localhost kernel: found SMP MP-table at 000fe710
Jan 21 22:23:38 localhost kernel: On node 0 totalpages: 131056
Jan 21 22:23:38 localhost kernel: DMA zone: 4096 pages, LIFO batch:0
Jan 21 22:23:38 localhost kernel: Normal zone: 126960 pages, LIFO batch:31
Jan 21 22:23:38 localhost kernel: DMI 2.3 present.
Jan 21 22:23:38 localhost kernel: ACPI: RSDP (v000 DELL ) @ 0×000fdc80
Jan 21 22:23:38 localhost kernel: ACPI: RSDT (v001 DELL PE2550 0×00000001 MSFT 0×0100000a) @ 0×000fdc94
Jan 21 22:23:38 localhost kernel: ACPI: FADT (v001 DELL PE2550 0×00000001 MSFT 0×0100000a) @ 0×000fdcc4
Jan 21 22:23:38 localhost kernel: ACPI: MADT (v001 DELL PE2550 0×00000001 MSFT 0×0100000a) @ 0×000fdd38
Jan 21 22:23:38 localhost kernel: ACPI: SPCR (v001 DELL PE2550 0×00000001 MSFT 0×0100000a) @ 0×000fdd98
Jan 21 22:23:38 localhost kernel: ACPI: DSDT (v001 DELL PE2550 0×00000001 MSFT 0×0100000a) @ 0×00000000
Jan 21 22:23:38 localhost kernel: ACPI: PM-Timer IO Port: 0×808
Jan 21 22:23:38 localhost kernel: ACPI: Local APIC address 0xfee00000
Jan 21 22:23:38 localhost kernel: ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled)
Jan 21 22:23:38 localhost kernel: Processor #1 6:8 APIC version 17
Jan 21 22:23:38 localhost kernel: ACPI: LAPIC (acpi_id[0x02] lapic_id[0x00] enabled)
Jan 21 22:23:38 localhost kernel: Processor #0 6:8 APIC version 17
Jan 21 22:23:38 localhost kernel: ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1])
Jan 21 22:23:38 localhost kernel: ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1])
Jan 21 22:23:38 localhost kernel: ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0])
Jan 21 22:23:38 localhost kernel: IOAPIC[0]: apic_id 2, version 17, address 0xfec00000, GSI 0-15
Jan 21 22:23:38 localhost kernel: ACPI: IOAPIC (id[0x03] address[0xfec01000] gsi_base[16])
Jan 21 22:23:38 localhost kernel: IOAPIC[1]: apic_id 3, version 17, address 0xfec01000, GSI 16-31
Jan 21 22:23:38 localhost kernel: ACPI: IRQ9 used by override.
Jan 21 22:23:38 localhost kernel: Enabling APIC mode: Flat. Using 2 I/O APICs
Jan 21 22:23:38 localhost kernel: Using ACPI (MADT) for SMP configuration information
Jan 21 22:23:38 localhost kernel: Allocating PCI resources starting at 20000000 (gap: 1ffff000:dec01000)
Jan 21 22:23:38 localhost kernel: Detected 993.471 MHz processor.
Jan 21 22:23:38 localhost kernel: Built 1 zonelists. Total pages: 131056
Jan 21 22:23:38 localhost kernel: Kernel command line: root=/dev/sda1 ro single
Jan 21 22:23:38 localhost kernel: mapped APIC to ffffd000 (fee00000)
Jan 21 22:23:38 localhost kernel: mapped IOAPIC to ffffc000 (fec00000)
As you can see, I let the machine sit for about 5 minutes before cycling the power. Unfortunately, I don’t see anything in there that tips me off (but then I know next to nothing about this Dell machine, being primarily a Mac guy). Any help would be greatly appreciated!
22nd January 2009, 21:39
@George: I was talking about console output, as the bios upgrade happens right before loading the bios itself on the first reboot. The system logs that you have here don;t show anything related to this, and they will never see this in fact as it happens before loading the OS. hth.
22nd January 2009, 21:42
Marius,
I appreciate the help. It’s a bit of a PITA to see what’s happening on console because I normally run the machine headless (VNC, terminal, etc.). However, I’ll try to stick a monitor on the machine and see if I can ascertain anything further. Thanks again for your assistance.
16th February 2009, 13:47
Marius thank you for your help. I’ve a power edge 800 with bios A01. No problem to upgrade to A02 But I can’t to uprage to A03. I’ve this message
“PBX01:/usr/src# dellBiosUpdate -u -f bios.hdr
WARNING: BIOS HDR file does not contain support for this system.
This may result in bad things happening!
Exiting…
PBX01:/usr/src# getSystemId
Libsmbios: 0.12.1
System ID: 0×0185
Service Tag: 6DLVF1J
Express Service Code: 13883492071
Product Name: PowerEdge 800
BIOS Version: A02
Vendor: Dell Computer Corporation
Is Dell: 1 ”
Do you have a idea? Many thanks
Eric
16th February 2009, 15:07
@Eric: from the error message you get it looks like the firmware doesn’t have support for your hardware (even though that should be the case). I have no idea what could be the problem; I would ask this to a Dell support representative as they might have a much better idea than us on why would this happen.
Sorry I can’t be of much help here, but hopefully you will find a fix soon,
- Marius -
24th February 2009, 18:56
Monitoring Dell Hardware with Debian Userland…
{}How to monitor Dell PERC and other hardware using IPMI, OMSA, and MegaCli. see also: Upgrading Dell Firmware with Debian Userland netsec:Upgrading Dell Firmware with Debian Userland Overview of Tools and Terminology Monitor/Manage PERC: OMSA,….
2nd June 2009, 16:52
I’ve just followed your guide and it worked flawlessly on debian lenny. Thankyou very much
codge