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:
- TFTpd32 - http://tftpd32.jounin.net
- SysLinux 3.61- http://www.kernel.org/pub/linux/utils/boot/syslinux/
- Diskette Image (In this case the Dell Latitude LS A09 revision provided by manufacturer) - http://www.bay-wolf.com/flashbios.htm
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
- Browse to ‘syslinux3.61/com32/modules/’ and copy the file ‘menu.c32’ to the netbootbios folder.
- Browse to syslinux3.61/memdisk/ and copy the file ‘memdisk’ to the netbootbios folder.
- 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.
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/