DebAWeek: flashrom
I hesitate to select flashrom because it is a program that should be used with the utmost caution and because it doesn’t yet work as well as I would like. However, it shows great promise and offers functionality that is currently lacking in Linux. Quite simply it is an open source application that allows the user to flash their BIOS from Linux. Usually, to flash the BIOS of a machine I tend to use a boot cd to load a DOS environment from which I can run the BIOS update utility. With flashrom I can flash the system BIOS from Linux and reboot at my leisure.
So let’s take a real example which is my desktop computer. The motherboard is an ASUS M2NPV-VM running BIOS 0705. I first went to the LinuxBIOS Flashrom page to discover whether this motherboard was compatible with flashrom and found that it allegedly was. I then went do the ASUS website and found the most recent BIOS was 1201, which I promptly downloaded. I then installed flashrom:
sudo apt-get install flashrom
After that I tested to see if it would work on the motherboard:
sudo flashrom
Calibrating delay loop... ok No LinuxBIOS table found. Found chipset "NVidia MCP51": Enabling flash write... OK. SST49LF040B found at physical address: 0xfff80000 Flash part is SST49LF040B (512 KB) OK, only ENABLING flash write, but NOT FLASHING.
I then proceeded to save my existing BIOS:
flashrom -s bios0705.bin
Then I tried flashing using the old BIOS as a test. The reason for doing this is that if it fails, since you’re only writing the existing BIOS you shouldn’t ruin your motherboard. To be clear though, any use of flashrom could ruin your system so do not use it unless you know what you are doing and have a recovery plan.
flashrom -wvV bios0705.bin- -w = write flash, -v = verify flash, -V = verbose information
Calibrating delay loop... 286M loops per second. ok No LinuxBIOS table found. Found chipset "NVidia MCP51": Enabling flash write... OK. Probing for Am29F040B, 512 KB probe_29f040b: id1 0x21, id2 0x1f Probing for Am29F016D, 2048 KB probe_29f040b: id1 0xff, id2 0xff Probing for AE49F2008, 256 KB probe_jedec: id1 0xbf, id2 0x50 Probing for At29C040A, 512 KB probe_jedec: id1 0xbf, id2 0x50 Probing for At29C020, 256 KB probe_jedec: id1 0xbf, id2 0x50 Probing for Mx29f002, 256 KB probe_29f002: id1 0xbf, id2 0x50 Probing for SST29EE020A, 256 KB probe_jedec: id1 0xbf, id2 0x50 Probing for SST28SF040A, 512 KB probe_28sf040: id1 0x21, id2 0x1f Probing for SST39SF010A, 128 KB probe_jedec: id1 0xbf, id2 0x50 Probing for SST39SF020A, 256 KB probe_jedec: id1 0xbf, id2 0x50 Probing for SST39SF040, 512 KB probe_jedec: id1 0xbf, id2 0x50 Probing for SST39VF020, 256 KB probe_jedec: id1 0xbf, id2 0x50 Probing for SST49LF040B, 512 KB probe_jedec: id1 0xbf, id2 0x50 SST49LF040B found at physical address: 0xfff80000 Flash part is SST49LF040B (512 KB) Flash image seems to be a legacy BIOS. Disabling checks. ERASE FAILED Verifying flash address: 0x00000000 – FAILED
So unfortunately flashrom did not work for this motherboard, despite it being listed as compatible on the LinuxBIOS Flashrom page. I decided to update the flash using a boot cd and the update utility from the ASUS website. This worked fine and I was left disappointed that flashrom was not as developed as I had hoped. Still the project shows promise and with any luck someday Linux users will be able to flash their BIOS as easily as Windows users.
There’s not a lot of information about the use of flashrom but here are a few pages I found:




Works for me
Sorry, but two things about your article strike me as rather odd:
- Your mainboard was not listed as supported (contrary to your claims)
- You didn't inquire for help with the flashrom developers (at least there's nothing in the public mailing list archives)
The devs are quite friendly and added support for my board after I mailed to their list. Just try it - they won't bite you.