Difference between revisions of "BIOS update without optical disk"
m |
m |
||
Line 2: | Line 2: | ||
A quick look at the ''BIOS Update (Bootable CD)'' iso-image shows that its <tt>iso9660</tt> filesystem is empty and its bootimage is of <tt>BootMediaType=4</tt>, i.e. it is a [http://www.phoenix.com/NR/rdonlyres/98D3219C-9CC9-4DF5-B496-A286D893E36A/0/specscdrom.pdf harddisk emulation]. Therefore non of the methods discussed in [[BIOS_Upgrade/X_Series]] would work. There are many Linux tools which extract bootimages from iso-images, but after a search over the net, I didn't find any which works correctly with <tt>BootMediaType=4</tt> (e.g. <tt>geteltorito</tt> form '''genisoimage''' package messes things up). I found, however, a free open-source DOS utility '''isobar''' from [http://shsucdx.adoxa.cjb.net/ shsucd] package. So, I just [http://colimit.googlepages.com/isobar.c ported] it to linux. | A quick look at the ''BIOS Update (Bootable CD)'' iso-image shows that its <tt>iso9660</tt> filesystem is empty and its bootimage is of <tt>BootMediaType=4</tt>, i.e. it is a [http://www.phoenix.com/NR/rdonlyres/98D3219C-9CC9-4DF5-B496-A286D893E36A/0/specscdrom.pdf harddisk emulation]. Therefore non of the methods discussed in [[BIOS_Upgrade/X_Series]] would work. There are many Linux tools which extract bootimages from iso-images, but after a search over the net, I didn't find any which works correctly with <tt>BootMediaType=4</tt> (e.g. <tt>geteltorito</tt> form '''genisoimage''' package messes things up). I found, however, a free open-source DOS utility '''isobar''' from [http://shsucdx.adoxa.cjb.net/ shsucd] package. So, I just [http://colimit.googlepages.com/isobar.c ported] it to linux. | ||
+ | |||
+ | UPDATE: the [http://www.uni-koblenz.de/~krienke/ftp/noarch/geteltorito/geteltorito latest] version of geteltorito now includes my patch and works with <tt>BootMediaType=4</tt>. | ||
'''Note:''' I used the method, described below to update the BIOS on my {{X200}}. It may or may not work for you, even if the ''BIOS Update (Bootable CD)'' iso-image has the same structure. It is not clear what is the root of the problem, but in some cases PC-DOS, used by Lenovo, hangs when booted via <tt>memdisk</tt>. The location from which <tt>memdisk</tt> is loaded (harddrive, USB-stick, or cdrom) also matters (for {{X200}}, harddrive works but USB-stick hangs). | '''Note:''' I used the method, described below to update the BIOS on my {{X200}}. It may or may not work for you, even if the ''BIOS Update (Bootable CD)'' iso-image has the same structure. It is not clear what is the root of the problem, but in some cases PC-DOS, used by Lenovo, hangs when booted via <tt>memdisk</tt>. The location from which <tt>memdisk</tt> is loaded (harddrive, USB-stick, or cdrom) also matters (for {{X200}}, harddrive works but USB-stick hangs). | ||
Line 22: | Line 24: | ||
cp /usr/lib/syslinux/memdisk /boot/memdisk | cp /usr/lib/syslinux/memdisk /boot/memdisk | ||
− | * If you are using grub1 / grub- | + | * If you are using grub1 / grub-legacy append the following lines to /boot/grub/menu.lst |
title BIOS update | title BIOS update |
Revision as of 06:35, 8 April 2010
For recent models, such as Thinkpad X200, Lenovo provides both win32 "BIOS update utility" and iso-image of "BIOS Update (Bootable CD)". If you don't have Windows installed, the first option is obviously unavailable for you. If you have an optical drive of some kind (internal, or built into the docking station, or an external USB drive) you can burn the iso-image and proceed with the BIOS update. In case if you don't have any optical drive things get a little tricky.
A quick look at the BIOS Update (Bootable CD) iso-image shows that its iso9660 filesystem is empty and its bootimage is of BootMediaType=4, i.e. it is a harddisk emulation. Therefore non of the methods discussed in BIOS_Upgrade/X_Series would work. There are many Linux tools which extract bootimages from iso-images, but after a search over the net, I didn't find any which works correctly with BootMediaType=4 (e.g. geteltorito form genisoimage package messes things up). I found, however, a free open-source DOS utility isobar from shsucd package. So, I just ported it to linux.
UPDATE: the latest version of geteltorito now includes my patch and works with BootMediaType=4.
Note: I used the method, described below to update the BIOS on my X200. It may or may not work for you, even if the BIOS Update (Bootable CD) iso-image has the same structure. It is not clear what is the root of the problem, but in some cases PC-DOS, used by Lenovo, hangs when booted via memdisk. The location from which memdisk is loaded (harddrive, USB-stick, or cdrom) also matters (for X200, harddrive works but USB-stick hangs).
- make sure that you have syslinux installed (we will need memdisk from this package)
apt-get install syslinux
- compile the isobar utility
gcc isobar.c -o isobar
- extract the bootimage from the BIOS Update (Bootable CD) iso-image and copy it to the boot partition
./isobar 6duj08uc.iso -o bios.img cp bios.img /boot/bios.img
- copy memdisk loader to the boot partition
cp /usr/lib/syslinux/memdisk /boot/memdisk
- If you are using grub1 / grub-legacy append the following lines to /boot/grub/menu.lst
title BIOS update root (hd0,0) kernel /memdisk initrd /bios.img
- If you are using grub2 (Debian squeeze/sid), append the following to /etc/grub.d/40_custom
menuentry "BIOS Update" { linux16 /boot/memdisk initrd16 /boot/bios.img }
- Run update-grub to regenerate /boot/grub/grub.cfg
- reboot, and in the grub menu choose the BIOS update option
Hard drive firmware update utility
Besides BIOS updates, Lenovo also provides Hard drive firmware update utility in the form of a bootable iso-image. Quick check shows that in some cases it has the same structure as above, i.e. empty iso9660 filesystem and bootimage of BootMediaType=4. So, naturally, one would think that we can boot it in the same way as above, via grub & memdisk. However, common sense tells that it is not a good idea to read the firmware from the same very harddrive whose firmware we are updating. But looking further into the structure of the bootimage we see that first it creates a RAMDRIVE, copies the update utility there, and launches it from the RAMDRIVE. So, it is actually OK to use grub. Tested on my X200.
Related links
Here is a patch to geteltorito script to make it work correctly with BootMediaType=4.
Should work with
T400, R400, T500, R500, X200, X200s, X200 Tablet, X301, W500, W700, Hard drive firmware update