Upgrading the bios on an x220 from Linux

This is something I don't do often. I did it once before. That thinkpad no longer runs. This (new to me) thinkpad had an ancient BIOS. I refuse to go through the anguish that is installing windows just to upgrade the bios. Luckily, lenovo provides bootable CD images that make it easy to upgrade the bios. Unluckily, I'm unaware of any x220 with a CD drive. Converting the iso to a bootable disk USB is simple enough.

1. Get firmware

There are other firmwares for other models. I'm sure the process is almost identical.

$ wget https://download.lenovo.com/pccbbs/mobiles/8duj31us.iso

2. Convert nonsense formats to something that works on a bootable USB

substitute sdx for the appropriate drive. Don't flash your hard drive. Use fdisk -l or lsblk to find the right one.

$ sudo pkg install geteltorito
$ geteltorito -o x220bios.img 8duj32us.iso
$ sudo umount /dev/sdx*
$ sudo dd if=./x220bios.img of=/dev/sdx
$ sudo eject /dev/sdx

3. Booting from the USB

insert the usb into the x220, reboot, mash the blue 'ThinkVantage' button, press 'F12', then use the arrow keys to select the "USB" option or something similar.

If you've done everything correctly, you will see this screen
If you've done everything correctly, you will see this screen

To proceed with the upgrade, select option 2 and follow the instructions. The system will power cycle a few times but eventually the upgrade will be complete. Once it's started, leave it be for a few minutes. You can safely remove the usb flash drive when the system boots back into your OS.

UPDATE: adding a custom bootsplash

You can replace the "Lenovo" logo with your own. This image must be encoded as a .BMP, .GIF, or .JPG, have a file size of 30K or less, and have a resolution of less than or equal to 640x480.

$ sudo su
# mount /dev/sdx1 /mnt
# cd /mnt/FLASH
# cat README.TXT | less
# cp /path/to/NEW_LOGO.GIF ./LOGO.GIF

And now we will modify the batch file, lcreflsh.bat. Make it look like this:

@echo off
flash2.exe /U /LOGO:LOGO.GIF

And now to unmount the drive and follow the instructions above flash the bios on the x220:

# umount /dev/sdx*
# eject /dev/sdx*
This is what my bootsplash looks like now
This is what my bootsplash looks like now.