DellBIOS

Differences between revisions 30 and 38 (spanning 8 versions)
Revision 30 as of 2012-07-26 12:30:35
Size: 17171
Editor: inet-emmc08-o
Comment: Update about using memdisk and FreeDOS from Dell's biosdisk archive to flash a BIOS reasonably simply
Revision 38 as of 2015-02-04 01:52:30
Size: 9310
Editor: penalvch
Comment: Added support note on PowerEdge as I just went through upgrading a slew of them and Ubuntu didn't quite work out as well as desired.
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= Updating the BIOS on Dell systems =
BIOS update utilities and files are often provided as Windows executable files. This guide provides information for Dell users to use such files without using Windows or any emulation software.
||<tablestyle="float:right; font-size: 0.9em; width:40%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;"><<TableOfContents>>||
Line 4: Line 3:
== If you have a Dell Mini 9 ==
The only BIOS recommended update for the Dell Mini 9 is version A01. There is no know mechanism for doing this update from Linux at this time.
For more details see [[http://ubuntuforums.org/showpost.php?p=6500457&postcount=21|this thread in the Ubuntu forums]] Noting that the thread is three years old, can anyone confirm that it is still current?
= Introduction =
Line 8: Line 5:
== Checking your current BIOS version ==
The current BIOS version can be checked by this command from Ubuntu:
{{{
BIOS update utilities and files are often provided as .exe files. The BIOS updates work by booting the machine into DOS using a USB or floppy (FreeDOS or MS-DOS) and then running an executable to reflash the BIOS.

This guide provides information for Dell users to use such files without using Windows.

= Checking your current BIOS version =

The current BIOS version can be checked by this command from Ubuntu: {{{
Line 12: Line 13:
}}}

The current BIOS release date can be obtained by invoking:
{{{
}}} The current BIOS release date can be obtained by invoking: {{{
Line 19: Line 17:
== Upgrading the BIOS using Dell's "biosdisk" and "syslinux memdisk" ==
The procedure detailed here is based on '''Updating the BIOS without using biosdisk''' below, but uses the disk image found in Dell's '''biosdisk''' archive. It uses '''FreeDOS''' from the disk image provided in Dell's archive and the '''syslinux memdisk''' utility to start a DOS system without needing a floppy disk (or even a drive) and run Dell's BIOS update utility from there. It has been tested on a Latitude E6410 laptop with Ubuntu 11.10 and 12.04, and may work for hardware from other manufacturers who provide their BIOS update tool as a DOS executable too (the disk image isn't Dell-specific). The current version of '''biosdisk''' contains a sufficiently large '''FreeDOS''' image to hold the BIOS update executable file. I took the liberty of putting this section near the top of the wiki page, as I think that the information here is slightly more up-to-date than other sections.
= Upgrading the BIOS and hardware firmware for PowerEdge servers =
Line 22: Line 19:
Dell's '''biosdisk''' utility can currently be downloaded from their site (search for "biosdisk" in your favourite search engine) as a tar.gz archive. Please update this entry as names and details change. I was able to update my BIOS using the following steps: == CentOS ==
Line 24: Line 21:
1. I downloaded the current BIOS image for my laptop, packed as a combined DOS/Windows executable, from Dell (the file was called '''!E6410A12.exe'''). One of the easiest methods requiring no server configuration is to upgrade PowerEdge servers via booting into a CentOS 7.0 x64 live environment (USB is faster but one may want to use CD/DVD due to a limited number of USB ports), load the firmware BIN files onto a FAT32 USB drive, execute the following in a terminal to find the path to the USB drive, and launch the .BIN extension firmware file: {{{
df -h
sudo bash FILENAME.BIN
}}} This is how the files were developed assuming one is using Red Hat. As well, while one of the files tested worked by default in Ubuntu (ex. firmware update for Broadcom BCM5720 NetXtreme Gigabit Ethernet Adapter), running the .BIN file for the iDRAC firmware initially complained of missing packages (ex. rpm, stty, gzip, among others) despite gzip being confirmed installed. Installed rpm, executed the .BIN file and this caused the server to start to reboot and then hang, which after a hard shutdown, and booting into the Lifecycle Controller the firmware was not upgraded. However, the same .BIN file worked flawlessly in CentOS.
Line 26: Line 26:
2. I installed the '''syslinux''' package from the Ubuntu repositories and copied the '''memdisk''' tool to '''/boot''': == Dell OpenManage Ubuntu Repository ==

For more on this, please see [[http://linux.dell.com/repo/community/ubuntu/]].

= Upgrading with a FreeDOS USB drive =

Follow the directions here to create a FreeDOS USB drive:
http://chtaube.eu/computers/freedos/bootable-usb/

After you've done that:

1. Eject the USB drive, then re-insert it so you can see the new FreeDOS file system.

2. Copy your BIOS update file to the drive.

3. Reboot, press F12 for the one-time boot menu, and boot from the USB Storage Device.

4. Choose "fdos".

5. Choose "4 - Load FreeDOS without drivers."

6. Execute the BIOS update.

= Using WINE to extract the BIOS image for a Dell Inspiron 1525 =
Line 28: Line 52:
 $ sudo apt-get install syslinux
 $ sudo cp /usr/lib/syslinux/memdisk /boot
sudo apt-get install firmware-addon-dell libsmbios-bin wine
update_firmware
sudo modprobe dell_rbu
}}} Check your BIOS version number: {{{
sudo dmidecode -s bios-version
}}}

Download the BIOS update .exe from Dell's support site, then run: {{{
wine 1525_A17.EXE -writehdrfile -nopause
Line 32: Line 63:
3. I downloaded the archive (called '''biosdisk-git-06112010.tar.gz''' at the time of writing) and extracted the FreeDOS floppy image '''dosdisk8192.img''' from the archive to the current directory and renamed it to '''!E6410A12.img''' to match the BIOS image I wanted to flash. Check it outputs a .hdr file: {{{
ls *.hdr
}}} Then use this file: {{{
sudo dellBiosUpdate -u -f 1525_A17.hdr
}}} Reboot:{{{
sudo reboot now
}}} One should see a BIOS update screen. Please ensure you do not restart, or lose power during this process. Once it reboots automatically, one may see if it took via:{{{
sudo smbios-sys-info
}}}
Line 34: Line 73:
4. I mounted the image, copied the file onto it and put it into '''/boot''' using the commands
{{{
 $ mkdir /tmp/floppy
 $ sudo mount -t vfat -o loop,quiet,umask=000 E6410A12.img /tmp/floppy
 $ cp E6410A12.exe /tmp/floppy
 $ sudo umount /tmp/floppy
 $ sudo cp E6410A12.img /boot
}}}
Substitute '''!E6410A12.exe''' and '''!E6410A12.img''' with the appropriate names.
= Updating the BIOS by booting into firmware directly =
Line 44: Line 75:
5. I rebooted to grub2, entered the command line with "C" and entered the commands:
{{{
 linux16 /boot/memdisk
 initrd16 /boot/E6410A12.img
 boot
}}}
to boot into the '''FreeDOS''' image (pressing <Enter> twice to confirm that I didn't want to reset the time and date), then executed
{{{
 A:\>E6410A12.exe
}}}
and followed the instructions, which brought me to the successful conclusion of the process.
1. Obtain the appropriate BIOS .EXE file for your computer from [[http://support.dell.com]] (search under "drivers & downloads"). Download it to your hard drive. In this example we'll use the filename `I545-A12.EXE` but it will be different for you if you have a different Dell model (or a newer BIOS revision).
Line 56: Line 77:
== Upgrading the BIOS from the Internet using Dell packages ==
Dell's linux firmware repository is "obsolete and unmaintained" as they say. They recommend their OMSA repository but as of this writing there is no support for Debian-based systems such as Ubuntu, and it appears that OMSA only works with Dell PowerEdge servers, which have official Linux support. If you have one of those machines you probably won't be reading this page. For reference, the OMSA repository info page can be found here:

[[http://linux.dell.com/wiki/index.php/Repository/OMSA]]

== What worked for one user on a Dell Inspiron 1525 and Xubuntu, using Wine to extract BIOS image etc ==

This is in part pasted and reconstructed from my shell history, but I thought it better to put the info out there than ensure it's 100% polished:

{{{sudo apt-get install firmware-addon-dell libsmbios-bin wine}}}

{{{update_firmware}}}

{{{sudo modprobe dell_rbu}}}

Check your BIOS version number, make a note if needed:

{{{sudo dmidecode -s bios-version}}}

Time to download...

{{{cd ~/Downloads}}}

Have the BIOS update .exe downloaded from Dell's support site, then run something like this:

{{{wine 1525_A17.EXE -writehdrfile -nopause}}}

Check it output a .hdr file

{{{ls *.hdr}}}

Then use said file

{{{sudo dellBiosUpdate -u -f 1525_A17.hdr}}}

I rebooted after:

{{{sudo reboot now}}}

I saw a black and white BIOS update screen, it took about a minuite. DO NOT RESTART OR LOOSE POWER DURING THIS PROCESS.

So it did it's thing, then it rebooted itself and I booted back into [x]ubuntu, and checked my bios again with this command:

{{{sudo smbios-sys-info}}}

'''Big credit''': I figured this out in part from http://en.gentoo-wiki.com/wiki/Dell_BIOS_Upgrade

and http://java2go.blogspot.co.uk/2010/05/how-to-upgrade-your-dells-bios-directly.html

== Updating the BIOS without without using biosdisk ==
The following instructions are adapted from [[http://ubuntuforums.org/showthread.php?t=1317269|this helpful yet outdated thread]] and tested with a Dell Inspiron 545 on 8 May 2012.

If you try Dell's '''biosdisk''' linux utility you'll quickly realise it does not work - attempting the upgrade spits out the rather cryptic "Error! udosexe = -5". The error is caused because the Dell BIOS updater is a compressed archive containing both the BIOS image (2MB) and an installer. Unpacking that on a 1.44MB disk will not work. Frustratingly, it will also not work on a 2.88MB disk, because the compressed archive+unpacked contents is too big!

1. Obtain the appropriate BIOS .EXE file for your computer from [[http://support.dell.com]] (search under "drivers & downloads"). Download it somewhere on your hard drive. In this example we'll use the filename `I545-A12.EXE` but it will be different for you if you have a different Dell model (or a newer BIOS revision).

2. We need to create a 2.88MB "floppy" disk image (1.44MB is too small for the uncompressed BIOS code) and mount it. Note that FreeDOS don't provide an 'empty' 2.88MB boot disk so we need to delete the "fdos" utility folder to get space. We'll need to obtain a FreeDOS disk image and mount it: {{{
 wget http://www.fdos.org/bootdisks/autogen/FDSTD.288.gz
 gunzip FDOEM.288.gz
 mkdir /tmp/floppy
 sudo mount -t vfat -o loop,quiet,umask=000 FDSTD.288 /tmp/floppy
 rm -rf /tmp/floppy/fdos
}}}
Note that that last step is crucial to free up sufficient space on the "floppy".
2. We need to create a 2.88MB "floppy" disk image (1.44MB is too small for the uncompressed BIOS code) and mount it. Note that FreeDOS doesn't provide an 'empty' 2.88MB boot disk so we need to delete the "fdos" utility folder to get space. We'll need to obtain a FreeDOS disk image and mount it: {{{
wget http://www.fdos.org/bootdisks/autogen/FDSTD.288.gz
gunzip FDOEM.288.gz
mkdir /tmp/floppy
sudo mount -t vfat -o loop,quiet,umask=000 FDSTD.288 /tmp/floppy
rm -rf /tmp/floppy/fdos
}}} Note that that last step is crucial to free up sufficient space on the "floppy".
Line 122: Line 86:
 sudo apt-get install dosemu
 dosemu
sudo apt-get install dosemu
dosemu
}}} You should get a window pop up that looks like DOS with the C drive active. What you are actually seeing is a dosemu 'virtual' drive, who's actual location on your Ubuntu system is ~/.dosemu/drive_c

4. Copy the .exe file to your '''dosemu''' "C" drive: {{{
cp I545-A12.EXE ~/.dosemu/drive_c
Line 125: Line 93:
You should get a window pop up that looks like DOS with the C drive active. What you are actually seeing is a dosemu 'virtual' drive, who's actual location on your Ubuntu system is ~/.dosemu/drive_c
Line 127: Line 94:
4. Copy the .exe file to your '''dosemu''' "C" drive:
 {{{ cp I545-A12.EXE ~/.dosemu/drive_c }}}

5. Back in the '''dosemu''' window, type
{{{ dir }}}
and confirm that the BIOS update's .EXE file is there.
5. Back in the '''dosemu''' window, type: {{{
dir
}}} and confirm that the BIOS update's .EXE file is there.
Line 136: Line 100:
Run the BIOS upgrade file again in the DOS box, and wait until it says '`Begin to check the bin file`'. Immediately press Ctrl-C on the keyboard to cancel and exit the program before it fails and erases the files we need. Make sure the files you need are there by typing {{{
 dir
Run the BIOS upgrade file again in the DOS box, and wait until it says '`Begin to check the bin file`'. Immediately press Ctrl-C on the keyboard to cancel and exit the program before it fails and erases the files we need. Make sure the files you need are there by typing: {{{
dir
}}} If you don't see files named something like `AFU877.EXE` (probably the same for everyone) and `8A1D1P34.BIN` (probably different for everyone), you hit Ctrl-C a moment too late. Just re-run the original .EXE file and try to kill it at the right moment. The .BIN file should be around 1-2MB in size, depending on the BIOS.

7. Copy the files to your "floppy" drive image: {{{
cp ~/.dosemu/drive_c/afu877.exe /tmp/floppy
cp ~/.dosemu/drive_c/8a1d1p34.bin /tmp/floppy
Line 140: Line 109:

If you don't see files named something like `AFU877.EXE` (probably the same for everyone) and `8A1D1P34.BIN` (probably different for everyone), you hit Ctrl-C a moment too late. Just re-run the original .EXE file and try to kill it at the right moment. Don't you wish Dell made this easy for us? The .BIN file should be around 1-2MB in size, depending on the BIOS.

7. Copy the files to your "floppy" drive image: {{{
 cp ~/.dosemu/drive_c/afu877.exe /tmp/floppy
 cp ~/.dosemu/drive_c/8a1d1p34.bin /tmp/floppy
}}}

8. That's it for the DOS stuff so you can close the DOS box down. Now to tidy up and prepare to run the update. {{{
 sudo umount /tmp/floppy
 sudo mv FDSTD.288 /boot/biosupdate.img
 sudo apt-get install syslinux
 sudo cp /usr/lib/syslinux/memdisk /boot/
8. That's it for the DOS stuff so you can close the DOS box down. Now to tidy up and prepare to run the update: {{{
sudo umount /tmp/floppy
sudo mv FDSTD.288 /boot/biosupdate.img
sudo apt-get install syslinux
sudo cp /usr/lib/syslinux/memdisk /boot/
Line 171: Line 132:
14. Start the BIOS update by typing the following (substitute the name of the .EXE and .BIN files you extracted from the Dell download, as appropriate) {{{
 afu877 8a1d1p34.bin
14. Start the BIOS update by typing the following (substitute the name of the .EXE and .BIN files you extracted from the Dell download, as appropriate): {{{
afu877 8a1d1p34.bin
Line 175: Line 136:
15. Follow the prompts, cross your fingers and with any luck it will update your BIOS successfully. 15. Follow the prompts, reboot, and confirm that your BIOS was updated.
Line 177: Line 138:
16. Reboot into Ubuntu as usual = Obtaining and using an image from the WinPhlash utility =
Line 179: Line 140:
17. Confirm that your BIOS was updated by following the instructions under "Checking your current BIOS version", above.

== Upgrading the BIOS using biosdisk and a floppy disk ==
'''NOTE''' that '''biosdisk''' hasn't been updated in almost a year and appears to be broken as of this writing (May 2012). See the "Updating the BIOS without without using biosdisk" section above for an alternative method.

'''biosdisk''' is a utility maintained by John Hull at Dell. There isn't an official Ubuntu package yet but the provided downloadable archive has an installer which can be used to upgrade your BIOS from Ubuntu. It also doesn't appear to work at all for Ubuntu.

'''biosdisk''' simplifies the process of flashing your system BIOS under Linux on Dell desktops and laptops. The purpose of this utility is to create a bootable BIOS flash image using the raw BIOS flash executable images (e.g. WS360A05.exe) available from [[http://support.dell.com]]. An RPM, SRPM, and tarball for this project are available at http://linux.dell.com/biosdisk.

'''Be sure to check with Dell support if a given BIOS version applies to your Ubuntu system'''. Some BIOS upgrades are designed specifically for Windows and do not follow specifications, as such they may not be suitable for Ubuntu.

The project consists of a shell script that, when executed, creates a FreeDOS floppy image at a location of your choosing. This project is intended for Dell desktop and laptop customers and not PowerEdge customers, since Linux BIOS flash packages are already available for PowerEdge systems, and raw executable BIOS flash images are not.

To use the biosdisk utility to create a BIOS flash image, first download the latest raw BIOS image for your system from support.dell.com or ftp://ftp.dell.com/bios. If you use support.dell.com then the executable you are offered may be a Windows-only utility called WinPhlash. If this is the case (for example, if you try the below and are told that the file cannot be run in DOS mode) then follow the instructions at the end of this section. You then have one of several options:

 * Create a bootable FreeDos floppy with the BIOS upgrade
 * Create a dd floppy image (in a file)
 * Create a user-installable distribution-specific package (e.g. RPM)
 * Install the image for your bootloader

=== Installing biosdisk for Ubuntu (does not seem to work with 12.04 Precise) ===
 1. Download the latest tarball (.tar.gz archive) version of biosdisk from http://linux.dell.com/biosdisk to your home directory. An [[http://linux.dell.com/biosdisk/biosdisk-git-06112010.tar.gz|11 June 2010 Git snapshot]] was the latest available as of January 2011.
 1. Open a terminal window by going to Applications | Accessories | Terminal
 1. Extract the archive: {{{ tar -zxvf biosdisk-git-06112010.tar.gz }}} (or whatever the current version might be)
 1. Change to the directory where files were extracted: {{{ cd biosdisk }}}
 1. Two packages are needed for biosdisk to work. They are both part of the main repository. The following command will install them:
{{{ sudo apt-get install dos2unix syslinux }}}
 1. Now the install script can be invoked: {{{ sudo ./install.sh }}}
 1. If you don't get any output, the install should have completed succesfully. To verify your installation is complete, invoke biosdisk without any parameters, as root: {{{ sudo biosdisk }}}

=== Creating a bootable FreeDos floppy disk with the BIOS upgrade using '''biosdisk''' ===
The '''mkfloppy''' action will create the biosdisk image and write it directly to a floppy disk or USB drive. Usage is the following:
{{{ biosdisk mkfloppy [-o option] [-d device] [-k baseimage] /path/to/.exe }}}

If you are using an external USB floppy drive, make sure you use the -d option to refer to it, for example:
{{{ biosdisk mkfloppy [-o option] -d /dev/xxxxx [-k baseimage] /path/to/.exe }}}

Where xxxxx is your USB drive's device. Make sure you have the right device or you could wipe out data on the wrong drive!

=== Creating a floppy disk image file using '''biosdisk''' ===
If you don't have a floppy drive, you can still use biosdisk to create a floppy image file and boot that via your bootloader.

The '''mkimage''' action will create a floppy image on the user's hard drive. Usage is the following:
{{{ biosdisk mkimage [-o option] [-i destination] [-k baseimage] /path/to/.exe }}}.

Typically you'd just type {{{ sudo biosdisk mkimage /path/to/.exe }}} and this will emit a .img file in /tmp. You then install that .img file by adding it to Grub 2 as described below.

=== Installing an image in the bootloader via Grub 2 configuration ===
After you've created a floppy image file (see above), you can boot that floppy image file using Grub 2. These commands will copy the necessary files into /boot and edit the Grub 2 configuration file. Replace FILENAME as appropriate for your BIOS image:

{{{
sudo cp /tmp/FILENAME.img /boot
sudo cp /usr/lib/syslinux/memdisk /boot
echo "menuentry 'BIOS Flash' {" | sudo tee -a /etc/grub.d/40_custom
echo "set root='(hd0,1)'" | sudo tee -a /etc/grub.d/40_custom
echo "linux16 /boot/memdisk bigraw" | sudo tee -a /etc/grub.d/40_custom
echo "initrd16 /boot/FILENAME.img" | sudo tee -a /etc/grub.d/40_custom
echo "}" | sudo tee -a /etc/grub.d/40_custom
}}}

Finally, execute {{{sudo update-grub}}} and reboot. Select the "BIOS Flash" option from the Grub menu options.

=== Obtaining and using an image from the WinPhlash utility ===

If the download from the DELL site comes as a WinPhlash installer, then the biosdisk method will not work - the executable cannot be run from the DOS environment it boots into. Consequently we must modify the image biosdisk creates. Firstly, you need WINE to obtain the image from the archive:

{{{
Firstly, you need WINE to obtain the image from the archive: {{{
Line 251: Line 146:
If this method doesn't work, you may have downloaded a newer installer.  You can then try

{{{
If this method doesn't work, you may have downloaded a newer installer. You can then try: {{{
Line 257: Line 150:
which will extract the ROM file in the same directory, i.e., /path/to/biosupdater.ROM

Assuming the image from biosdisk is called bios.img, next mount the image somewhere and modify it (as root):

{{{
#
mount -t vfat -o loop,rw /path/to/bios.img /mnt/somewhere
# rm -f /mnt/somewhere/{xxxx.exe}
# cp ~/.wine/drive_c/windows/temp/WINPHLASH/BIOS.ROM /mnt/somewhere
# cp /path/to/phlash16.exe /mnt/somewhere
# umount /mnt/somewhere
which will extract the ROM file in the same directory: {{{
/path/to/biosupdater.ROM
}}} Assuming the image from biosdisk is called bios.img, next mount the image somewhere and modify it (as root): {{{
mount -t vfat -o loop,rw /path/to/bios.img /mnt/somewhere
rm -f /mnt/somewhere/{xxxx.exe}
cp ~/.wine/drive_c/windows/temp/WINPHLASH/BIOS.ROM /mnt/somewhere
cp /path/to/phlash16.exe /mnt/somewhere
umount /mnt/somewhere
}}} Now write the image to a floppy or boot it with GRUB as before, but once you get a command prompt and autoexec.bat has failed, type: {{{
phlash16.exe BIOS.ROM
Line 269: Line 162:
Now write the image to a floppy or boot it with GRUB as before, but once you get a command prompt and autoexec.bat has failed, type: = Obtaining the phlash16.exe Utility =
Line 271: Line 164:
{{{
phlash16.exe BIOS.ROM
One way of getting phlash16.exe has been described [[http://www.ruzee.com/blog/2010/01/dell-studio-15-bios-update-with-linux|previously]]. The relevant directions from there are reproduced in what follows. [[ftp://ftp.dell.com/bios/1747A04_DOS.exe|1747A04_DOS.exe]] has been successfully used before, though [[ftp://ftp.dell.com/bios/|other archives from Dell]] may also work. After downloading the suitable file, use DosBox to extract it: {{{
sudo apt-get install dosbox
}}} In the directory where you just downloaded the file: {{{
dosbox .
Line 274: Line 169:

In the DosBox window, type the name of the executable. It will give an error, but upon closing it, and inspecting your directory, you should see that the archive was extracted and phlash16.exe should now be present.

Introduction

BIOS update utilities and files are often provided as .exe files. The BIOS updates work by booting the machine into DOS using a USB or floppy (FreeDOS or MS-DOS) and then running an executable to reflash the BIOS.

This guide provides information for Dell users to use such files without using Windows.

Checking your current BIOS version

The current BIOS version can be checked by this command from Ubuntu:

sudo dmidecode -s bios-version

The current BIOS release date can be obtained by invoking:

sudo dmidecode -s bios-release-date

Upgrading the BIOS and hardware firmware for PowerEdge servers

CentOS

One of the easiest methods requiring no server configuration is to upgrade PowerEdge servers via booting into a CentOS 7.0 x64 live environment (USB is faster but one may want to use CD/DVD due to a limited number of USB ports), load the firmware BIN files onto a FAT32 USB drive, execute the following in a terminal to find the path to the USB drive, and launch the .BIN extension firmware file:

df -h
sudo bash FILENAME.BIN

This is how the files were developed assuming one is using Red Hat. As well, while one of the files tested worked by default in Ubuntu (ex. firmware update for Broadcom BCM5720 NetXtreme Gigabit Ethernet Adapter), running the .BIN file for the iDRAC firmware initially complained of missing packages (ex. rpm, stty, gzip, among others) despite gzip being confirmed installed. Installed rpm, executed the .BIN file and this caused the server to start to reboot and then hang, which after a hard shutdown, and booting into the Lifecycle Controller the firmware was not upgraded. However, the same .BIN file worked flawlessly in CentOS.

Dell OpenManage Ubuntu Repository

For more on this, please see http://linux.dell.com/repo/community/ubuntu/.

Upgrading with a FreeDOS USB drive

Follow the directions here to create a FreeDOS USB drive: http://chtaube.eu/computers/freedos/bootable-usb/

After you've done that:

1. Eject the USB drive, then re-insert it so you can see the new FreeDOS file system.

2. Copy your BIOS update file to the drive.

3. Reboot, press F12 for the one-time boot menu, and boot from the USB Storage Device.

4. Choose "fdos".

5. Choose "4 - Load FreeDOS without drivers."

6. Execute the BIOS update.

Using WINE to extract the BIOS image for a Dell Inspiron 1525

sudo apt-get install firmware-addon-dell libsmbios-bin wine
update_firmware
sudo modprobe dell_rbu

Check your BIOS version number:

sudo dmidecode -s bios-version

Download the BIOS update .exe from Dell's support site, then run:

wine 1525_A17.EXE  -writehdrfile -nopause

Check it outputs a .hdr file:

ls *.hdr

Then use this file:

sudo dellBiosUpdate -u -f 1525_A17.hdr

Reboot:

sudo reboot now

One should see a BIOS update screen. Please ensure you do not restart, or lose power during this process. Once it reboots automatically, one may see if it took via:

sudo smbios-sys-info

Updating the BIOS by booting into firmware directly

1. Obtain the appropriate BIOS .EXE file for your computer from http://support.dell.com (search under "drivers & downloads"). Download it to your hard drive. In this example we'll use the filename I545-A12.EXE but it will be different for you if you have a different Dell model (or a newer BIOS revision).

2. We need to create a 2.88MB "floppy" disk image (1.44MB is too small for the uncompressed BIOS code) and mount it. Note that FreeDOS doesn't provide an 'empty' 2.88MB boot disk so we need to delete the "fdos" utility folder to get space. We'll need to obtain a FreeDOS disk image and mount it:

wget http://www.fdos.org/bootdisks/autogen/FDSTD.288.gz
gunzip FDOEM.288.gz
mkdir /tmp/floppy
sudo mount -t vfat -o loop,quiet,umask=000 FDSTD.288 /tmp/floppy
rm -rf /tmp/floppy/fdos

Note that that last step is crucial to free up sufficient space on the "floppy".

3. Next we need to install dosemu (a DOS emulator) so we can extract the BIOS files from the Dell installer but with unlimited diskspace:

sudo apt-get install dosemu
dosemu

You should get a window pop up that looks like DOS with the C drive active. What you are actually seeing is a dosemu 'virtual' drive, who's actual location on your Ubuntu system is ~/.dosemu/drive_c

4. Copy the .exe file to your dosemu "C" drive:

cp I545-A12.EXE ~/.dosemu/drive_c

5. Back in the dosemu window, type:

dir

and confirm that the BIOS update's .EXE file is there.

6. Type the name of the BIOS file (e.g. I545-A12) and hit return to start it up. You should see a 'Copyright (c) Foxconn LTD 2001-2007...' message and importantly messages 'Decompress the exe file' and 'Decompress the bin file'. Unfortunately, you'll also notice that it ends with an error message and 'ALL Files removed!' at the bottom. So this is where you need to get quick with your fingers, because we need to get those files before they disappear!

Run the BIOS upgrade file again in the DOS box, and wait until it says 'Begin to check the bin file'. Immediately press Ctrl-C on the keyboard to cancel and exit the program before it fails and erases the files we need. Make sure the files you need are there by typing:

dir

If you don't see files named something like AFU877.EXE (probably the same for everyone) and 8A1D1P34.BIN (probably different for everyone), you hit Ctrl-C a moment too late. Just re-run the original .EXE file and try to kill it at the right moment. The .BIN file should be around 1-2MB in size, depending on the BIOS.

7. Copy the files to your "floppy" drive image:

cp ~/.dosemu/drive_c/afu877.exe /tmp/floppy
cp ~/.dosemu/drive_c/8a1d1p34.bin /tmp/floppy

8. That's it for the DOS stuff so you can close the DOS box down. Now to tidy up and prepare to run the update:

sudo umount /tmp/floppy
sudo mv FDSTD.288 /boot/biosupdate.img
sudo apt-get install syslinux
sudo cp /usr/lib/syslinux/memdisk /boot/

9. You now need to add the biosupdate boot image to your grub (system boot) menu. You can do this from the command line like this:

sudo cat >> /etc/grub.d/40_custom
menuentry 'Dell BIOS Flash Updater' {
set root='(hd0,msdos1)'
linux16 /boot/memdisk
initrd16 /boot/biosupdate.img
}

10. Press Ctrl-D to save your changes to that file.

11. Restart your computer. As soon as it starts to boot from the hard drive, hold down the Shift key to make the Grub menu appear.

12. At the Grub menu select the final entry (the one you just added; it should say "Dell BIOS Flash Updater") and press Enter.

13. FreeDOS should now start up. If you get prompts for the date and time just press Enter until you get to the A:> prompt.

14. Start the BIOS update by typing the following (substitute the name of the .EXE and .BIN files you extracted from the Dell download, as appropriate):

afu877 8a1d1p34.bin

15. Follow the prompts, reboot, and confirm that your BIOS was updated.

Obtaining and using an image from the WinPhlash utility

Firstly, you need WINE to obtain the image from the archive:

wine /path/to/biosupdater.exe

Then extract and attempt to run the updater, which will fail, but place a file named BIOS.ROM in C:\Windows\Temp\WINPHLASH\. Now download the phlash16.exe utility, which will actually perform the flash using BIOS.ROM.

If this method doesn't work, you may have downloaded a newer installer. You can then try:

wine /path/to/biosupdater.exe  /WriteRomFile

which will extract the ROM file in the same directory:

/path/to/biosupdater.ROM

Assuming the image from biosdisk is called bios.img, next mount the image somewhere and modify it (as root):

mount -t vfat -o loop,rw /path/to/bios.img /mnt/somewhere
rm -f /mnt/somewhere/{xxxx.exe}
cp ~/.wine/drive_c/windows/temp/WINPHLASH/BIOS.ROM /mnt/somewhere
cp /path/to/phlash16.exe /mnt/somewhere
umount /mnt/somewhere

Now write the image to a floppy or boot it with GRUB as before, but once you get a command prompt and autoexec.bat has failed, type:

phlash16.exe BIOS.ROM

Obtaining the phlash16.exe Utility

One way of getting phlash16.exe has been described previously. The relevant directions from there are reproduced in what follows. 1747A04_DOS.exe has been successfully used before, though other archives from Dell may also work. After downloading the suitable file, use DosBox to extract it:

sudo apt-get install dosbox

In the directory where you just downloaded the file:

dosbox .

In the DosBox window, type the name of the executable. It will give an error, but upon closing it, and inspecting your directory, you should see that the archive was extracted and phlash16.exe should now be present.


CategoryLaptop

DellBIOS (last edited 2015-02-04 01:52:30 by penalvch)