2010-09-27

Flashing a Dell Vostro 1510 Bios Without Windows.

I've been trying to get my BIOS updated for several months now, and attempted several times with no success, but tonight, I stumbled into the information that gave me the breakthrough I needed.

What Doesn't Work

Dell have started being nice and releasing more Linux friendly ways of installing bios updates, but sadly, for models like mine, there is no support.

Using Windows7/Vista 64bit

It just will never work. Not even with administrator privileges. That WinPhlash thing just Doesn't Work™

Using The biosdisk technique

Doesn't work, because the winphlash executable that you have to use will not run in the FreeDOS boot environment. It's a Win32 GUI app.

Using the remote boot update method

There is no hdr file produced by Dell to work with this bios yet, and there is no way to produce one.

Windows XP Portable Edition( BartPE )

In my case, the "bootable media" just hung for 8 hours and wouldn't boot.

Working Solution: phlash16.exe

Legacy dos apps save the day!.

While this method worked for me, its not official, nor supported, and you are on your own if it breaks, just like I was. However, you have my good intentions and the testimony of others that it works for some of us.

Checklist

From here on, I'm going to be using very gentoo-specific terms, but they should be portable to other Linux distributions.

Install nessecary tools

You'll need libsmbios to see what you have, and biosdisk to generate a bootfloppy which we can inject our tools into. Wine will also be required to extract the ROM file from the Winphlash self-extractor.

$ sudo emerge -uvatDN libsmbios
$ sudo emerge -uvatDN biosdisk
$ sudo emerge -uvatDN wine
$ sudo emerge -uvatDN unzip

Check your Bios and System

While this technique may work for other Dells, I have not myself tested it and thus, cannot recommend it. If you use my pre-generated boot-floppy , you will WANT to have the same BIOS SystemID and Version as I currently have.
$ sudo smbios-sys-info-lite 
Libsmbios:    2.2.19
System ID:    0x0273  # MATCH 
Service Tag:  XXXXXXX
Express Service Code: XXXXXXXXXXX
Aset Tag:  X
Product Name: Vostro1510
BIOS Version: A10 # MATCH
Vendor:       Dell Inc.
Is Dell:      1

Get Dell Bios updates in WinPhlash form

I must remind you, this solution works ONLY for WinPhlash based bios updates. If your bios update installer tool does NOT use WinPhlash, you should not continue.

Get a copy of Phlash16.exe

I can't gurantee that this link will always work, so Google for it if my link dies. But in the mean time, you can get a copy of winphlash16 with one of intels bios flashes. You won't need everything in the archive, but it has what we need. So, download the 3C91.zip bios package for Quanta* QTW3A945PM1

Preparation

Unpack your Dell BIOS

Unfortunately, Dell bundle this as a self-extracting achive, a weirdly formatted one at that, which contains the winphlash and the BIOS.ROM file you need. So we need to run this with Wine to get it out.
$ wine ~/Downloads/V151015.exe
It will do its thing, run and so forth, tell it to start extracting, and then winphlash will run. It will then throw an error, but it doesn't matter, its done the job we wanted it to.

Grab the BIOS.ROM from your wine dir

This will be in a directory such as C:\WINDOWS\TEMP\WINPHLASH, but relative to your wine directory. In my case, its ~/.wine/drive_c/windows/temp/WINPHLASH/BIOS.ROM
$ cp ~/.wine/drive_c/windows/temp/WINPHLASH/BIOS.ROM /tmp/

Unzip phlash16.exe from the Zip

$ cd /tmp/
$ mkdir phlash
$ cd phlash
$ unzip ~/Downloads/3C91.zip phlash16.exe

Build the MemDisk

We can now build an in-memory FreeDOS boot diskette and stash it into Grub.conf so we can boot into our bios updater on our next boot.

Mount /boot

$ sudo mount /boot 

Generate a BiosDisk

Note I don't really "get" how biosdisk works inside, so we're passing it here an executable thats reasonably large, and known not to work =).

We're going to fix that later.

$ sudo biosdisk install ~kent/Downoads/V151015.exe
That should have built you a nice boot floppy config and setup grub in nice ways.

Manually hack the generated BiosDisk

Now for the part that does all the sexy good work. That boot floppy image is a mountable filesystem image we can read and write to.
$ mkdir /tmp/vfat/
$ sudo mount /boot/V151015.img /tmp/vfat/
$ cd /tmp/vfat
$ sudo rm /tmp/vfat/V151015.exe
$ sudo cp /tmp/phlash/phlash16.exe ./
$ sudo cp /tmp/BIOS.ROM ./

Now here, we could make this automatically flash the bios on boot, but I'm going to suggest against that, because I don't want to run it accidentally at some later stage before I get rid of it again, and interrupt it, bricking my box =).

So instead, I've set it up to give me a command shell, and I manually execute the flash command.

$ sudo vim -c "set fileformat=dos" autoexec.bat
command.com

This is the flash instruction. You really want the /S option, unless you enjoy deafening beeping at 3am.

The /EXIT option is supposed to STOP exiting and auto-rebooting, but it does this anyway, for reasons that I don't understand, and quite frankly am slighly afraid of.

$ sudo vim -c "set fileformat=dos" flash.bat
phlash16.exe /S /EXIT BIOS.ROM

Now to check we have DOS line endings.
$  grep ''  autoexec.bat flash.bat  | cat --show-all
autoexec.bat:command.com^M$
autoexec.bat:^M$
flash.bat:phlash16.exe /S /EXIT BIOS.ROM^M$
flash.bat:^M$
And now we can unmount it, and be ready to fly.
$ cd /
$ sudo umount /tmp/vfat

IMPORTANT PRE-FLIGHT BRIEFING

You are about to fly into dangerous territory, where enemy combatants like "power failure" can mean certain death

Please read all following instructions and be familiar with them BEFORE attempting to continue

  • When you reboot, you will see the bios flash option in grub
  • Select this
  • A few seconds later, you will be given the A:\ prompt of FreeDOS
  • You will double check you are on an uninterruptable power supply system, and batteries are working
  • You will be running mains power
  • type flash.bat and press your ENTER key
  • A bios flash utility will load, and progress to flash your bios
  • YOU WILL BE PATIENT AND NOT INTERRUPT IT
  • Upon completion of flashing, the computer may suddenly and unexpectedly reboot with NO warning, and this may surprise you and make you think your computer has crashed! DONT PANIC, wait it should quickly return to normal booting.
  • During this boot, you should observe the code "A15" in the bios booting sequence instead of "A10" =).
  • Boot back into linux, and proceed to remove the flash installer from the boot menu =)
  • SUCCESS!

Experimenters Advice

If you have elected to try see what other flags phlash16.exe has, you're probably not going to find any of them useful. I have noticed something weird, and that is, at least in the biosdisk boot enviroment, the /BU option does not work. Using it causes phlash16.exe to reboot as soon as it hits the backup phase, making you panic and thinking you killed it. I have not played with the other flags, but they didn't appear to be of use to me =).

Proceed! AND GOOD LUCK MY FELLOW COUNTRYMAN!

yes, you may now go and try the above.

POST-OP cleanup

Once you have successfully flashed your bios, you may then clean the biosdisk entry out of grub:
$ biosdisk uninstall ~kent/Downloads/V1510A15.exe
And then it should be gone from menu.lst

PREMADE BIOSDISKS

For your convenience, I have made a pre-built copy of the biosimage, my grub configuration, and the memdisk kernel:

Dell Bios Phlash Vostro1510 A10 -> A15 on humyo.com

They worked for me, and might work for you too.

The grub configuration is given for your understanding. The top section is all you need to add, but it probably won't work like that verbatim.