Flashrom

From flashrom
Revision as of 20:22, 22 May 2009 by Uwe (talk | contribs) (Supported mainboards: Update board list (based on flashrom -z output, patch pending).)
Jump to: navigation, search

flashrom is a utility for identifying, reading, writing, verifying and erasing flash chips. It's often used to flash BIOS/EFI/coreboot/firmware images.

Highlights of flashrom include:

  • Supports parallel, LPC, FWH and SPI flash interfaces.
  • Supports more than 150 flash chip families and half a dozen variants of each family.
  • Flash chip package agnostic. DIP32, PLCC32, DIP8, SO8/SOIC8, TSOP32, TSOP40 and more have all been verified to work.
  • Supports more than 75 different chipsets, some with multiple flash controllers.
  • Features special mainboard enabling code for dozens of nonstandard mainboards.
  • No physical access needed, root access is sufficient.
  • No bootable floppy disk, bootable CD-ROM or other media needed.
  • No keyboard or monitor needed. Simply reflash remotely via SSH.
  • No instant reboot needed. Reflash your chip in a running system, verify it, be happy. The new firmware will be present next time you boot.
  • Crossflashing and hotflashing is possible as long as the flash chips are electrically and logically compatible (same protocol). Great for recovery.
  • Scriptability. Reflash a whole pool of identical machines at the same time from the command line. It is recommended to check flashrom output and error codes.
  • Speed. flashrom is often much faster than most vendor flash tools.
  • Supports Linux, FreeBSD, DragonFly BSD, Solaris, Mac OS X, and other Unix-like OSes.


Supported devices

Supported chips

Vendor Flash part Status
  Probe Read Write Erase
AMD Am29F002(N)BB  ?  ?  ?  ?
AMD Am29F002(N)BT OK OK OK OK
AMD Am29F016D  ?  ?  ?  ?
AMD Am29F040B OK OK OK OK
AMD Am29F080B  ?  ?  ?  ?
AMD Am29LV040B  ?  ?  ?  ?
AMD Am29LV081B  ?  ?  ?  ?
ASD AE49F2008  ?  ?  ?  ?
Atmel AT25DF021  ?  ?  ?  ?
Atmel AT25DF041A  ?  ?  ?  ?
Atmel AT25DF081  ?  ?  ?  ?
Atmel AT25DF161  ?  ?  ?  ?
Atmel AT25DF321 OK OK OK OK
Atmel AT25DF321A  ?  ?  ?  ?
Atmel AT25DF641  ?  ?  ?  ?
Atmel AT25F512B  ?  ?  ?  ?
Atmel AT25FS010  ?  ?  ?  ?
Atmel AT25FS040  ?  ?  ?  ?
Atmel AT26DF041  ?  ?  ?  ?
Atmel AT26DF081A  ?  ?  ?  ?
Atmel AT26DF161  ?  ?  ?  ?
Atmel AT26DF161A  ?  ?  ?  ?
Atmel AT26F004  ?  ?  ?  ?
Atmel AT29C010A OK OK OK  ?
Atmel AT29C020 OK OK OK OK
Atmel AT29C040A  ?  ?  ?  ?
Atmel AT45CS1282  ?  ?  ?  ?
Atmel AT45DB011D  ?  ?  ?  ?
Atmel AT45DB021D  ?  ?  ?  ?
Atmel AT45DB041D  ?  ?  ?  ?
Atmel AT45DB081D  ?  ?  ?  ?
Atmel AT45DB161D  ?  ?  ?  ?
Atmel AT45DB321C  ?  ?  ?  ?
Atmel AT45DB321D  ?  ?  ?  ?
Atmel AT45DB642D  ?  ?  ?  ?
Atmel AT49BV512 OK OK OK OK
Atmel AT49F002(N)  ?  ?  ?  ?
Atmel AT49F002(N)T OK OK OK OK
AMIC A25L40P OK OK OK OK
AMIC A29002B  ?  ?  ?  ?
AMIC A29002T OK OK OK OK
AMIC A29040B OK OK  ?  ?
AMIC A49LF040A OK OK OK OK
EMST F49B002UA  ?  ?  ?  ?
EON EN29F002(A)(N)B  ?  ?  ?  ?
EON EN29F002(A)(N)T OK OK OK OK
Fujitsu MBM29F004BC  ?  ?  ?  ?
Fujitsu MBM29F004TC  ?  ?  ?  ?
Fujitsu MBM29F400BC  ?  ?  ?  ?
Fujitsu MBM29F400TC  ?  ?  ?  ?
Intel 82802AB OK OK OK OK
Intel 82802AC OK OK OK OK
Macronix MX25L512  ?  ?  ?  ?
Macronix MX25L1005  ?  ?  ?  ?
Macronix MX25L2005  ?  ?  ?  ?
Macronix MX25L4005 OK OK OK OK
Macronix MX25L8005 OK OK OK OK
Vendor Flash part Status
  Probe Read Write Erase
Macronix MX25L1605 OK OK OK OK
Macronix MX25L1635D  ?  ?  ?  ?
Macronix MX25L3205 OK OK OK OK
Macronix MX25L3235D  ?  ?  ?  ?
Macronix MX25L6405  ?  ?  ?  ?
Macronix MX25L12805  ?  ?  ?  ?
Macronix MX29F002B  ?  ?  ?  ?
Macronix MX29F002T OK OK OK OK
Macronix MX29LV040C OK OK  ?  ?
Numonyx M25PE10  ?  ?  ?  ?
Numonyx M25PE20  ?  ?  ?  ?
Numonyx M25PE40  ?  ?  ?  ?
Numonyx M25PE80 OK OK OK OK
Numonyx M25PE16  ?  ?  ?  ?
PMC Pm25LV010  ?  ?  ?  ?
PMC Pm25LV016B  ?  ?  ?  ?
PMC Pm25LV020  ?  ?  ?  ?
PMC Pm25LV040  ?  ?  ?  ?
PMC Pm25LV080B  ?  ?  ?  ?
PMC Pm25LV512  ?  ?  ?  ?
PMC Pm39LV010 OK OK OK OK
PMC Pm49FL002 OK OK OK OK
PMC Pm49FL004 OK OK OK OK
Sharp LHF00L04  ?  ?  ?  ?
Spansion S25FL016A OK OK OK OK
SST SST25VF016B OK OK OK OK
SST SST25VF032B OK OK OK OK
SST SST25VF040B  ?  ?  ?  ?
SST SST25VF040.REMS OK OK  ?  ?
SST SST25VF040B.REMS OK OK  ?  ?
SST SST25VF080B OK OK OK OK
SST SST28SF040A  ?  ?  ?  ?
SST SST29EE010 OK OK OK OK
SST SST29LE010  ?  ?  ?  ?
SST SST29EE020A OK OK OK OK
SST SST29LE020  ?  ?  ?  ?
SST SST39SF010A OK OK OK OK
SST SST39SF020A OK OK OK OK
SST SST39SF040 OK OK OK OK
SST SST39VF512 OK OK OK OK
SST SST39VF010 OK OK OK OK
SST SST39VF020 OK OK OK OK
SST SST39VF040 OK  ?  ?  ?
SST SST39VF080  ?  ?  ?  ?
SST SST49LF002A/B OK OK OK OK
SST SST49LF003A/B  ?  ?  ?  ?
SST SST49LF004A/B OK OK OK OK
SST SST49LF004C  ?  ?  ?  ?
SST SST49LF008A OK OK OK OK
SST SST49LF008C  ?  ?  ?  ?
SST SST49LF016C OK OK OK OK
SST SST49LF020 OK OK  ?  ?
SST SST49LF020A  ?  ?  ?  ?
SST SST49LF040 OK OK OK OK
SST SST49LF040B OK OK OK OK
SST SST49LF080A OK OK OK OK
Vendor Flash part Status
  Probe Read Write Erase
SST SST49LF160C OK OK OK OK
ST M25P05-A  ?  ?  ?  ?
ST M25P10-A  ?  ?  ?  ?
ST M25P20  ?  ?  ?  ?
ST M25P40  ?  ?  ?  ?
ST M25P40-old  ?  ?  ?  ?
ST M25P80  ?  ?  ?  ?
ST M25P16 OK OK OK OK
ST M25P32 OK OK OK OK
ST M25P64  ?  ?  ?  ?
ST M25P128  ?  ?  ?  ?
ST M29F002B  ?  ?  ?  ?
ST M29F002T/NT OK OK OK OK
ST M29F040B OK OK OK OK
ST M29F400BT  ?  ?  ?  ?
ST M29W010B  ?  ?  ?  ?
ST M29W040B  ?  ?  ?  ?
ST M50FLW040A  ?  ?  ?  ?
ST M50FLW040B  ?  ?  ?  ?
ST M50FLW080A OK OK OK OK
ST M50FLW080B  ?  ?  ?  ?
ST M50FW002  ?  ?  ?  ?
ST M50FW016  ?  ?  ?  ?
ST M50FW040 OK OK OK OK
ST M50FW080 OK OK OK OK
ST M50LPW116  ?  ?  ?  ?
SyncMOS S29C31004T  ?  ?  ?  ?
SyncMOS S29C51001T  ?  ?  ?  ?
SyncMOS S29C51002T OK OK OK OK
SyncMOS S29C51004T  ?  ?  ?  ?
Winbond W25x10  ?  ?  ?  ?
Winbond W25x20  ?  ?  ?  ?
Winbond W25x40 OK OK OK OK
Winbond W25x80 OK OK OK OK
Winbond W29C011 OK OK OK OK
Winbond W29C020C OK OK OK OK
Winbond W29C040P  ?  ?  ?  ?
Winbond W29EE011 OK OK OK OK
Winbond W39V040A OK OK OK OK
Winbond W39V040B OK OK OK OK
Winbond W39V040C OK OK OK OK
Winbond W39V040FA OK OK OK OK
Winbond W39V080A OK OK OK OK
Winbond W49F002U OK OK OK OK
Winbond W49V002A OK OK OK OK
Winbond W49V002FA  ?  ?  ?  ?
Winbond W39V080FA OK OK OK OK
Winbond W39V080FA (dual mode)  ?  ?  ?  ?

Supported chipsets

Vendor Southbridge Status
ALi M1533 OK
AMD AMD-768 OK
AMD AMD8111 OK
AMD CS5530(A) OK
AMD CS5536 OK
AMD Elan SC520 OK
AMD SB600 OK
AMD SB700 OK
AMD SC1100  ?
ATI SB400 OK
Broadcom HT-1000 OK
Intel 440MX OK
Intel 6300ESB OK
Intel 631xESB/632xESB/3100 OK
Intel EP80579 OK
Intel ICH0 OK
Intel ICH10 OK
Intel ICH10D OK
Intel ICH10DO OK
Intel ICH10R OK
Intel ICH2 OK
Intel ICH2-M OK
Intel ICH3-M OK
Intel ICH3-S OK
Intel ICH4/ICH4-L OK
Intel ICH4-M OK
Intel ICH5/ICH5R OK
Vendor Southbridge Status
Intel ICH6/ICH6R OK
Intel ICH6-M OK
Intel ICH7DH OK
Intel ICH7/ICH7R OK
Intel ICH7M OK
Intel ICH7MDH OK
Intel ICH OK
Intel ICH8DH OK
Intel ICH8DO OK
Intel ICH8/ICH8R OK
Intel ICH8M OK
Intel ICH8M-E OK
Intel ICH9 OK
Intel ICH9DH OK
Intel ICH9DO OK
Intel ICH9M OK
Intel ICH9M-E OK
Intel ICH9R OK
Intel MPIIX  ?
Intel PIIX3 OK
Intel PIIX4/4E/4M OK
Intel PIIX OK
NVIDIA CK804 OK
NVIDIA CK804 OK
NVIDIA CK804 OK
NVIDIA MCP51  ?
Vendor Southbridge Status
NVIDIA MCP51  ?
NVIDIA MCP51  ?
NVIDIA MCP51  ?
NVIDIA MCP55 OK
NVIDIA MCP55 OK
NVIDIA MCP55 OK
NVIDIA MCP55 OK
NVIDIA MCP55 OK
NVIDIA MCP55 OK
NVIDIA MCP55 OK
NVIDIA MCP55 OK
NVIDIA MCP67 OK
SiS SiS5595 OK
SiS SiS630  ?
VIA CX700 OK
VIA VT8231  ?
VIA VT8235 OK
VIA VT8237 OK
VIA VT8237A OK
VIA VT8237S OK
VIA VT82C586A/B OK
VIA VT82C686A/B  ?

Supported mainboards

In general, it is very likely that flashrom works out of the box even if your mainboard is not listed below.

This is a list of mainboards where we have verified that they either do or do not need any special initialization to make flashrom work (given flashrom supports the respective chipset and flash chip), or that they do not yet work at all. If they do not work, support may or may not be added later.

Mainboards which don't appear in the list may or may not work (we don't know, someone has to give it a try). Please report any further verified mainboards on the mailing list.

Known good (worked out of the box)

Vendor Mainboard Status
Abit AX8 OK
Advantech PCM-5820 OK
ASI MB-5BLMP OK
ASUS A8N-E OK
ASUS A8NE-FM/S OK
ASUS A8N-SLI Premium OK
ASUS A8V-E Deluxe OK
ASUS M2A-VM OK
ASUS M2N-E OK
ASUS P2B OK
ASUS P2B-F OK
ASUS P2B-D OK
ASUS P2B-DS OK
ASUS A7V400-MX OK
ASUS A7V8X-MX OK
ASUS P4B266 OK
ASUS A8V-E SE OK
ASUS P2L97-S OK
ASUS M2A-MX OK
ASUS P5B-Deluxe OK
ASUS P6T Deluxe V2 OK
A-Trend ATC-6220 OK
BCOM WinNET100 OK
GIGABYTE GA-6BXC OK
GIGABYTE GA-6BXDU OK
Vendor Mainboard Status
GIGABYTE GA-6ZMA OK
Intel EP80759 OK
MSI KT4V OK
MSI MS-7046 OK
MSI MS-7065 OK
MSI MS-7236 (945PL Neo3) OK
MSI MS-7345 (P35 Neo2-FIR) OK
MSI MS-7168 (Orion) OK
NEC PowerMate 2000 OK
PC Engines Alix.1c OK
PC Engines Alix.2c2 OK
PC Engines Alix.2c3 OK
PC Engines Alix.3c3 OK
RCA RM4100 OK
Supermicro H8QC8 OK
Sun Blade x6250 OK
Thomson IP1000 OK
T-Online S-100 OK
Tyan S1846 OK
Tyan S2881 OK
Tyan S2882 OK
Tyan S2882-D OK
Tyan S2891 OK
Tyan S2892 OK
Vendor Mainboard Status
Tyan S2895 OK
Tyan S3095 OK
Tyan S5180 OK
Tyan S5191 OK
Tyan S5197 OK
Tyan S5211 OK
Tyan S5211-1U OK
Tyan S5220 OK
Tyan S5375 OK
Tyan iS5375-1U OK
Tyan S5376G2NR/S5376}WAG2NR OK
Tyan S5377 OK
Tyan S5397 OK
VIA EPIA-M OK
VIA EPIA-MII OK
VIA EPIA-CN OK
VIA EPIA-LN OK
VIA VB700X OK
VIA NAB74X0 OK
VIA pc2500e OK

Known good (with write-enable code in flashrom)

Vendor Mainboard Required option Status
Acorp 6A815EPD -m acorp:6a815epd OK
agami Aruma -m AGAMI:ARUMA OK
Artec Group DBE61 -m artecgroup:dbe61 OK
Artec Group DBE62 -m artecgroup:dbe62 OK
ASUS A7V8-MX SE OK
ASUS P4B266 OK
ASUS P5A -m asus:p5a OK
BioStar P4M80-M4 OK
EPoX EP-8K5A2 OK
EPoX EP-BX3 -m epox:ep-bx3 OK
GIGABYTE GA-2761GXDK -m gigabyte:2761gxdk OK
GIGABYTE GA-7VT600 OK
GIGABYTE GA-M57SLI-S4 -m gigabyte:m57sli OK
GIGABYTE GA-M61P-S3 -m gigabyte:m61p OK
GIGABYTE GA-MA78G-DS3H OK
GIGABYTE GA-MA78GM-S2H OK
GIGABYTE GA-MA790FX-DQ6 -m gigabyte:ma790fx-dq6 OK
HP DL145 G3 -m hp:dl145_g3 OK
Vendor Mainboard Required option Status
IBM x3455 -m ibm:x3455 OK
Intel D201GLY OK
IWILL DK8-HTX -m iwill:dk8_htx OK
Kontron 986LCD-M -m kontron:986lcd-m OK
Kontron 986LCD-M -m kontron:986lcd-m OK
MSI K8N Neo3 -m msi:k8n-neo3 OK
MSI K8T Neo2 OK
MSI KT4V -m msi:kt4v OK
MSI MS-7046 OK
Tyan S2498 (Tomcat K7M) OK
VIA EPIA-CN OK
VIA EPIA M/MII/... OK
VIA EPIA SP OK
VIA PC3500G -m via:pc3500g OK

Not supported (yet)

Vendor Mainboard Status
Abit IS-10 No
ASUS A7N8X-E Deluxe No
ASUS MEW-AM No
ASUS MEW-VM No
ASUS P3B-F No
ASUS P5B No
ASUS P5BV-M No
Biostar M6TBA No
Boser HS-6637 No
FIC VA-502 No
MSI MS-7260 (K9N Neo) No
PCCHIPS M537DMA33 No
Soyo SY-5VD No
Sun Fire x4540 No
Sun Fire x4150 No
Sun Fire x4200 No
Sun Fire x4600 No

Board notes

Supported laptops/notebooks

In general, flashing laptops is more difficult because

  • Laptops often use the flash chip for stuff besides the BIOS.
  • Laptops often have special protection stuff which has to be handled by flashrom.
  • Laptops often use flash translation circuits which need extra drivers in flashrom.

At this point we recommend to not use flashrom on untested laptops unless you have a means to recover from a flashing that goes wrong (a working backup flash chip and/or good soldering skills).

Known-good

Vendor Model Status
Lenovo 3000 V100 TF05Cxx OK

Known-bad

Vendor Model Status
IBM/Lenovo Thinkpad T40p No

Installation

Requirements

Flashrom requires the pciutils and zlib and the respective development packages in order to be built. In addition, the subversion package is required to download it.

In Debian unstable these development packages are called pciutils-dev/libpci-dev, zlib1g-dev, and subversion. Most other distributions call them pciutils-devel, zlib-devel, and subversion.

Manual Installation

$ svn co svn://coreboot.org/flashrom/trunk flashrom
$ cd flashrom
$ make
$ sudo make install

Debian

$ sudo aptitude install flashrom

Fedora

$ sudo yum install flashrom

Gentoo

$ emerge flashrom

Mandriva

$ urpmi flashrom

openSUSE

$ yast -i coreboot-utils

For distributions older than openSUSE Factory (11.0) you find "backports" in the openSUSE Build Service.

T2 SDE

Installation from source:

$ Emerge-Pkg flashrom

Installation of binaries:

$ mine -i flashrom-0.9.0.tar.bz2

FreeBSD

$ cd /usr/ports/sysutils/flashrom && make install clean

Windows

There is a Windows port of the flashrom utility. Download the latest version: DarmawanMappatutu_Salihun.tar.gz

Usage

Detect whether flashrom knows about your chipset/mainboard/BIOS chip:

$ flashrom

Read the current BIOS image into a file:

$ flashrom -r backup.bin

Depening on the chip driver, you may have to erase the chip before writing:

$ flashrom -E

Write a BIOS image (proprietary or coreboot) on the flash chip:

$ flashrom -wv newbios.bin
WARNING: This will overwrite your current BIOS! Make sure you know what you're doing!

For more documentation please see the flashrom README or the man page.

Fully testing flashrom chip/southbridge/mainboard support

See this page for instructions on how to test flashrom properly (this may be risky, make sure you have a working backup flash chip).

Flashrom Live CD

Flashrom Live CD

Flash chip overview

Modern mainboards store the BIOS in a reprogrammable flash chip. There are hundreds of different flash (EEPROM) chips, with variables such as memory size, speed, communication bus (LPC vs. ISA/PCI) and packaging to name just a few. The three most common packages are called DIP, PLCC and TSOP. The BIOS copyright holders often place a fancy sticker on the BIOS chip showing a name or logotype, BIOS version, serial number and copyright notice.

DIP32: Dual In-line Package, 32 pins

A rectangular black plastic block with lots of pins along the two longer sides of the package. DIP chips can be socketed which means they are detachable from the mainboard using physical force. Since they haven't been moved in and out of the socket very much (yet, hehe) they can appear to be quite difficult to release from the socket. One way to remove a DIP from a socket is by prying a thin screwdriver in between the plastic package and the socket, along the shorter sides where there are no pins, and then gently bending the screwdriver to push the DIP upwards, away from the mainboard. Alternate between the two sides to avoid bending the pins, and don't touch any of the pins with the screwdriver, see FAQ about ESD, electro-static discharge. If the DIP is soldered directly to the mainboard, it has to be desoldered in order to be reprogrammed outside the mainboard. If you do this, it's a good idea to solder a socket to the mainboard instead, to ease any future experiments.

PLCC32: Plastic Leaded Chip Carrier, 32 pins

Black plastic block again, but this one is much more square. PLCC is becoming the standard for mainboards because of it's smaller physical size. PLCC can also be socketed or soldered directly to the mainboard. Socketed PLCC chips can be removed using a special PLCC removal tool, or using a piece of nylon line tied in a loop around the chip and pulled swiftly straight up, or bending/prying using small screwdrivers if one is careful. PLCC sockets are often fragile so the screwdriver approach is not recommended. While the nylon line method sounds onorthodox it works well. Desoldering PLCC can be painful without specialized desoldering equipment particularly because PLCC chips have leads on all four sides of the package.

DIP8: Dual In-line Package, 8 pins

SOIC8: Small-Outline Integrated Circuit, 8 pins

TSOP: Thin Small-Outline Package

TSOPs are often used in embedded systems where size is important and there is no need for replacement in the field. It is possible to (de)solder TSOPs by hand, but it comes close to wizardry.