Please note that this blog has been moved.
Now it has its own domain: mynixworld.info 🙂
If you want to read the latest version of this article (recommended) please click here and I open the page for you.
I have a HP Compaq 6820s laptop and I want to upgrade its BIOS. In Linux we have flashrom which can (among others) flash firmware images as BIOS. The only problem is that my model is unsupported by that software. So the only reliable options seems to be the use of the HP’s HPQFlash utility.
HPQFlash (as you have guessed) works only on Windows XP/Vista. I have a virtual machine which runs WinXP but that is not good enough, as I need to access the real BIOS not the QEMU’s virtual one :o)
What can I do? Is there any Windows LiveCD available? Yes and no.
One can use the Microsoft’s Windows Preinstallation Environment but I choose to use VistaPE, which is a project (set of scripts) for WinBuilder to create a Live CD based on the kernel of Windows Vista. I choose VistaPE because I have Vista license but you can use also BartPE (for XP/2K3) or WinBuilder.
You should/can install WinBuilder only inside Windows, but my WindowsXP is a virtual machine (KVM guest).
Note: you should also install WAIK before the next step (is mandatory).
Anyway, afterwards I had installed the WinBuilder I choose the updates.boot-land.net and vistape.winbuilder.net projects and I had checked the complete list of VistaPE-CAPI options (just in case; but WMI is the most important for BIOS flash job). On “Source directory” I had mentioned the path to my Vista CD, on “Target directory” I had mentioned the place where the LiveCD will be built (ex: C:\Build\” and on “ISO File” I had specified the full name of the ISO file (only required if you want to create an ISO image for LiveCD). After all those things I had pressed the Play button and few minutes later the process was finished.
I wanted to create a bootable USB drive. The problem was, as I’ve said before, my WindowsXP was in fact inside of a virtual machine. I could use a physical USB device attached to my virtual machine but sometimes (depending on the version of libvirt/qemu you have installed) you might get in trouble. So instead of using a physical USB device I had created a virtual USB Disk device (a file of size 512MB) which I had activated as a drive, partitioned and formated inside WindowsXP. The USB device was in fact a qemu raw image stored as ~/myLiveCD.img file.
To write my LiveCD image on a bootable USB device I made later the following steps:
- In WinBuilder choose Finalize->Create ISO/CD/USB option. I had specified the root directory for my USB-device and later I pressed the “Make USB boot device”.
- I had choose to format my USB drive (NTFS filesystem) when asked about it
Once my LiveCD was written on the virtual USB disk I had shutdown the virtual machine. Now I came to the point where I really have to write the virtual USB image over my physical USB disk.
dd came in handy:
dd if=~/myLiveCD.img of=/dev/sdx
Note: /dev/sdx was in fact my USB device, so replace x with the letter corresponding to your device. Note that you should not use sdx1 or sdx2 or … or sdxn (where 1,2,..n are partition number) because we want to copy the entire raw format of the virtual usb disk over the physical usb disk (even the partition table!). So use this like in my example above!
Once dd had finished its job I just rebooted my laptop, I choose to boot from my USB disk and it presented me the VistaPE grub menu. So I booted the VistaPE and then I was able to install all the BIOS flash utilities and/or ROM images.
[!] Keep in mind that if you have the same model you should install all the BIOS releases in ascending order and not only the latest one.