BIOS Upgrade With only USB

From ThinkWiki
Jump to: navigation, search

How to upgrade the BIOS via bootable USB

This is something I did on my X60s. I don't have a ultrabay nor a CD, I don't have Windows either. I only use Linux. The obvious problem is how to upgrade the BIOS. I've tried several things. This is my report.


What worked in the end

In the end I used a windows tool for creating a bootable USB stick. The tool is described here and it can be also downloaded from that site. I created a FAT (not FAT32) filesystem, with DOS files from MS-DOS 7.11 (a zip file is provided on the same site). The only files copied to the USB are IO.SYS, MSDOS.SYS and COMMAND.COM. I did NOT have autoexec.bat nor config.sys nor have I enabled himem.sys.

After creating the bootable USB stick, you can just mount it (in Linux or Windows) and copy the files from the BIOS ISO image in a subdirectory (I used the directory "BIOS", can be anything). Don't copy the files to the root of the USB disk, since it'll override command.com.

That's all the preparation. I reboot the laptop, press F12 and choose to boot from the USB stick. Finally the laptop boots from the stick, and I get a normal DOS prompt. I cd to the "BIOS" directory and start the "command.com" program there. The Thinkpad Flashing tool appears, ask a question or two, you wait sometime (2-3 mins?) while the screen says "Updating", and at the end it beeps loudly and that's it.

This is the procedure I used to upgrade from the 2.11 to the 2.13 BIOS version.

What didn't work

First I tried to make a bootable USB disk using FreeDOS. That's fairly easy. You can just copy freedos files (kernel.sys, command.com) to the stick and use 'ms-sys' to set the correct boot records (MBR and partiton boot record). This booted fine but the BIOS flash utility didn't work. It just hanged on the "Updating" screen. Rebooting didn't damage anything.

I also tried the above configuration with himem enabled. Now the flashing utility visibly hanged at the point of "Updating" by displaying numbers all over the screen.

The I tried to create MS-DOS and PC-DOS bootable USB disks. The way I did this was to start qemu with a floppy image of the OS, and the USB disk as hard-drive, then using the native DOS tools (FDISK and FORMAT /s). Unfortunetaly, even when the USB disk was bootable in Qemu and a generic PC, the thinkpad wouldn't boot from this USB disk. I still can't understand why. I also tried funky partitions on the USB, like 64 cyls, 32 heads configuration - didn't help.

It's interesting that the partition that the HP tool created is very strange, I wonder how that affects booting:

Disk /dev/sdb: 1043 MB, 1043333120 bytes
255 heads, 63 sectors/track, 126 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0025755b
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1         127     1018848+   e  W95 FAT16 (LBA)
Partition 1 has different physical/logical endings:
    phys=(125, 254, 63) logical=(126, 215, 25)

Inspecting with ms-sys (a linux tool for writing MBR and root records) says this:

# ms-sys /dev/sdb1
/dev/sdb1 has a FAT16 file system.
/dev/sdb1 has an x86 boot sector,
it is exactly the kind of FAT16 DOS boot record this program
would create with the switch -6 on a FAT16 partition.

Nothing special there it seems. But

# ms-sys /dev/sdb
/dev/sdb has an x86 boot sector,
it is an unknown boot record

Maybe it's a special MBR that the HP tool creates?

These questions will be explored later...