Prev: Windows Vista Service Pack Won't Install | Next: Will Not Wake from Suspend to RAM or Disc |
(Index) |
The vendor of your Linux box has a new BIOS version, or you suspect bit-rot in your BIOS, so you want to (re)install it. How can this be done without access to Microsoft Windows?
Normal
vendors such as Dell are
Windows-centric, and they provide the BIOS as a MS-DOS EXE file, including
a flasher program with the payload attached. This of course is useless on
Linux unless you do some major gyrations.
Do this on a machine having a CD burner.
Download the BIOS flasher. Rename it to an 8.3 upper case filename, that is, up to 8 bytes basename, dot, 3 byte extension. For this explanation I'm calling it DM061.EXE .
Use your favorite burning software, such as k3b or brasero, to make
a data project
containing just this file. Burn it onto a CD.
Label it, so you don't mix up the discs.
Download a bootable ISO-9660 image of FreeDOS. This is the URL I used: ftp://ftp.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.0/fdbasews.iso (49Mb). The fdbasecd.iso version (8Mb) would have worked as well, but I wanted to see what was in FreeDOS so I got the larger image. Burn this image; use the special dialog in the burner software; you aren't trying to make a data project with the image file as the only file on the disc. Label the disc.
Boot the FreeDOS disc. If your normal boot order doesn't include the CD you may have to activate boot menu mode (on Dells, F12 at the pre-boot splash screen).
It uses isolinux to boot. At the first menu hit 1 continue
booting from CD
.
On the second menu choose 3 (I think) for Run FreeDOS from CD
(Command Prompt)
.
When you get the command prompt, remove the FreeDOS disc and insert the flasher disc.
cd \
dir (to make sure what the filename came out as)
DM061.EXE (give the actual filename of the flasher program)
It asks you twice whether to flash the BIOS. It does not balk if it finds that you're re-flashing the same version.
It prints a success message (you hope) and immediately reboots. The reboot is when the new BIOS is actually installed. Snatch out your flasher disc before getting an embarrassing message that it isn't bootable.
Let GRUB boot Linux from the hard disc. You're done.
The project to flash the BIOS had an unusually large number of blind alleys. Here's a list:
This RPM package and its various dependencies are normally very helpful on a Dell Intel box, but /usr/sbin/dellBiosUpdate (in smbios-utils-python) ultimately did not work out. See these links for documentation:
To extract the HDR file (payload) from the flasher EXE program, you need these packages from the above repository:
How to use: see this posting. Assuming we're working with DM061-020400.EXE:
The only problem is, firmwaretool (version 2.1.13 and previous) refuses to flash the same BIOS version that's already on the machine.
Several forum postings suggested to install and run this Windows emulator, and also qemu, but I decided to try other approaches before attempting these solutions.
This is the approach that eventually worked, but burning a bootable CD or creating a bootable USB stick was not easy. Plan B: Download the zip file from Sourceforge, unzip in a temp directory, copy everything from ./bin to the root of the USB stick. So where's the boot sector?
See this howto by Jeremy Visser.
The resulting USB stick will boot, announce FreeDOS
,
and hang. Obviously it can't find the kernel, which was
in the root directory. I never did figure out this one.
Erik says: download a FreeDOS bootable ISO (burn disc) and
install from there. I downloaded Balder,
and burned using this command line:
cdrecord -v -dao -dummy dev=/dev/sr0 -waiti fs=4m gracetime=2 -useinfo driveropts=burnfree,noforcespeed -data -pad - < $J/balder10.img
Unfortunately the resulting disc was not mountable and not bootable. This image file is for use on a floppy or for floppy emulation on a CD using the El Torito standard.
I downloaded sys-freedos-linux, a PERL script.
nasm
is required, available from the SuSE Build Service.
Here's the procedure:
mkdosfs -I /dev/sdb #Substitute device for USB stick
fdisk -l -u /dev/sdb #Just for paranoia
sys-freedos.pl --disk=/dev/sdb
mount /dev/sdb /mnt
cp freedos/bin/* /mnt
umount /mnt
Upon booting, the boot sector announced "Freedos" and proceeded to just sit there.
Let's try to burn a bootable ISO using Brasero. Oops, Brasero can't make bootable images de novo, though it can burn premade bootable images.
Bob Nelson STCHMAN
(dated 2009-2010) has a procedure.
Download and unzip his DOS boot image, obtaining DosBootimage.IMA. (A similar procedure should work with balder10.img that was downloaded previously.)
Start the burner program k3b, which is the normal one for a KDE desktop environment and apparently is also standard on Ubuntu.
Start a data project.
There is a button on the project pane for Make
Bootable
. Hit it; hit New
, select the above IMA
file. It will do
the El Torito thing involving a folder called boot
.
Also drop your flasher EXE file in the root of the project.
Burn it. Oops, k3b-1.68.0 provides a nonexistent
file to genisoimage and things go downhill from there; the
complaint is can't determine the size of the ISO image
and it burns nothing. Fails equally with balder10.img.
Finally I thought that in MS-DOS you can swap floppies at arbitrary times, so maybe you can do the same with CD's. That turned out to work. Procedure is at the start of this tale of woe.
Prev: Windows Vista Service Pack Won't Install | Next: Will Not Wake from Suspend to RAM or Disc |
(Index) |