Flashing a Dell Bios with Linux

Problem Statement

You want to flash a Dell bios but do not have Windows installed. The official Dell support site does only provide Windows executables. An additional constraint is that your computer does not have a floppy drive or you ran out of (working!) floppy disks.

Overview

Fortunately, Dell provides a program package called biosdisk which builds a FreeDOS based boot floppy image. Using your default boot loader such as grub, you are able to boot this image from your hard disk so that you don't need additional peripherials.

Step by Step

  1. Get the bios update from Dell (exe file)
  2. Get biosdisk from the Dell projects site (tar.gz is okay, no need to install anything)
  3. Get "memdisk" (Fedora: "syslinux" package)
  4. modify the biosdisk script, set the "baseDir" variable (first line after the comments) to the directory to which you extracted the biosdisk archive. The other option is to copy dosdisk.img to the default location ("/usr/share/biosdisk").
  5. Create a bootdisk as root (This is required because the biosdisk script tries to mount a loop device to create the floppy image which is only possible as root.): ./biosdisk mkimage <exe filename>
  6. After the last step there should be a img file in /tmp (e.g. "DME521-010104.img") which contains the bios flasher program. Move that file to /boot.
  7. Modify your grub configuration. Mine looked like this:
    title Dell Bios Update
        kernel /usr/lib/syslinux/memdisk floppy
        initrd /DME521-010104.img
    
  8. Reboot your system and choose the new item in the grub screen.

Usually, the flashing should start immediately but I had a small problem to defeat: DOS does only handle filenames up to a length of 8 characters (8+3, remember?) and so does FreeDOS. The biosdisk script does not handle this situation so you will get a "command not found" as last output. This is no problem, just start the flasher program manually by typing "DME521~1.exe" (or the the name of your executable). Maybe it is a bit tricky to find the "~" character because FreeDOS uses a US keyboard layout by default. Using a QWERTZ keyboard, I found it finally pressing the "" key.

Grub can't read files from LVM and Fedora/CentOS use this as default for the root file system. If you did not change this when installing your Fedora, you should move the memdisk binary to /boot and modify the grub configuration so that is says 'kernel /memdisk floppy' (paths in grub.conf are relative to /boot)