Flashing a BIOS via PXE

The scenario

So I was sitting there wondering how I would flash my BIOS without a CD or floppy drive. The laptop I was trying to flash was the Dell Latitude LS (with A05 bios revision). It is an ultra portable without any drives other than a HDD.
I was left with the choice of either buying an external floppy/cd drive, or finding a solution and using PXE to load the floppy image over the network.

This howto is written for the Dell Latitude LS500, although it should work with any computer which supports PXE provided the manufacturer has provided floppy images.
It worked fine for me, although keep in mind that flashing a BIOS is a dangerous task at any time (if it fails, you could end up with an oversized paperweight… so I’m not liable for anything that goes wrong).

Obtaining Files

You will need the following files for the process:

Preparing the Diskette Image

Create a folder called ‘netbootbios’. This will be the root directory from which everything will come together.

If you obtained the BIOS from bay-wolf.com you will need to extract the zip file to reveal a .iso image. You need to then extract the contents of that .iso image (I used 7-zip) to obtain the file ‘Bootable_1.44M.img’. This is the image of the floppy which we will boot. Copy ‘Bootable_1.44M.img’ into the netbootbios folder.

Preparing SysLinux

We only require three files from syslinux, so go ahead and extract it someplace

  1. Browse to ‘syslinux3.61/com32/modules/’ and copy the file ‘menu.c32’ to the netbootbios folder.
  2. Browse to syslinux3.61/memdisk/ and copy the file ‘memdisk’ to the netbootbios folder.
  3. Browse to syslinux3.61/ and copy the file ‘pxelinux.0’ to the netbootbios folder.

Now you need to create the configuration file. Create a folder inside the netbootbios folder called ‘pxelinux.cfg’ and create an empty file with no extension called ‘default’ in that folder and copy and paste the following content into it:

DEFAULT menu.c32
TIMEOUT 300
ALLOWOPTIONS 0
PROMPT 0
MENU TITLE PXE Boot System
LABEL Flash BIOS
    MENU LABEL ^Boot BIOS Flash Diskette/Image
    kernel memdisk
    append initrd=Bootable_1.44M.img
LABEL Exit
    MENU LABEL ^Exit
    LOCALBOOT  0

Preparing TFTpd32

Obtain TFTpd32 and copy the tftpd32.exe file to netbootbios/. Your directory structure should now look something like this:

netbootbios/
	pxelinux.cfg/
	Bootable_1.44M.img
	memdisk
	menu.c32
	pxelinux.0
	tftpd32.exe

The file ‘default’ with the configuration provided earlier should also be in the pxelinux.cfg directory. We now have all the files required and can now go ahead and configure TFTpd32.

Start tftpd32.exe and click the ‘DHCP Server’ tab. Make sure the boot file is set to ‘pxelinux.0’ and make sure that all the other settings are correct.TFTpd32 Configuration

Everything should be complete. Go ahead and make sure TFTpd32 is running and unblocked by the firewall, and prepare the client by allowing PXE booting and the client should automatically find the server you just prepared and load the image file.

For pleasure, some (very bad quality) pictures of it all working can be found at http://flickr.com/photos/kahrn/sets/72157604007374485/