BIOS Upgrade With only USB
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...