Update BIOS via FreeDOS on Linux PC

BIOS update via FreeDOS works across many PCs, including Dell and Gigabyte. The key is that the OEM provides BIOS as a DOS executable.

Setup DOS-bootable USB drive: download the DOS-flashable BIOS firmware from the OEM e.g. support.dell.com Determine USB drive device (e.g. /dev/mmcblk0) by issuing this command before and after USB drive insertion:

lsblk

Format (permanently erase) this USB drive with

umount /dev/mmcblk0

mkdosfs -F 32 /dev/mmcblk0

Download the FreeDOS “USB Full Image” and extract the FD*.img file. Write this image to the USB stick:

dd if=FD*.img of=/dev/mmcblk0 bs=4M

the image write will take a minute or two, depending on the write speed of the USB stick. To be sure it’s done, wait for this command to exit in a second Terminal window:

sync

Update BIOS: extract/copy ALL the BIOS self-extracted files to the root of the FreeDOS flash drive from Linux. Insert the USB flash drive into the PC to be flashed Upon powerup, choose to boot from the USB drive. This might require pressing F12 key. In the BIOS boot device menu, look under Legacy boot. If Legacy boot is not enabled, it may need to be enabled to see the FreeDOS USB drive. Do NOT install FreeDOS, just boot to DOS when prompted by FreeDOS. In FreeDOS prompt, type the name of the .exe or .bat file for the firmware update as per OEM instructions. The flashing process may take several minutes.

If the PC says

operating system not found

on this DOS USB drive, try it in another PC. If it still doesn’t work, try another model of USB flash drive. Some flash drives just are not amenable to being booted from.

If a new computer motherboard seems to be dead out of the box, be sure the power supply is working and connected correctly. It may have a CPU that’s too new for the motherboard BIOS.

Specific example: This happened for Gigabyte GA-Q87M-D2H with version F6 BIOS. Version F7 BIOS was necessary for Haswell Refresh CPUs. I had to put an “old” CPU in the motherboard to flash the motherboard BIOS!