NAME
flashrom - detect, read, write, verify and erase flash chips
SYNOPSIS
flashrom [-n] [-V] [-f] [-h|-R|-L|-z|-E|-r <file>|-w <file>|-v <file>]
[-c <chipname>] [-m [<vendor>:]<part>] [-l <file>]
[-i <image>] [-p <programmername>[:<parameters>]]
DESCRIPTION
flashrom is a utility for detecting, reading, writing, verifying and
erasing flash chips. It’s often used to flash
BIOS/EFI/coreboot/firmware images in-system using a supported
mainboard, but it also supports flashing of network cards (NICs), SATA
controller cards, and other external devices which can program flash
chips.
It supports a wide range of DIP32, PLCC32, DIP8, SO8/SOIC8, TSOP32, and
TSOP40 chips, which use various protocols such as LPC, FWH, parallel
flash, or SPI.
OPTIONS
Please note that the command line interface for flashrom will change
before flashrom 1.0. Do not use flashrom in scripts or other automated
tools without checking that your flashrom version won’t interpret
options in a different way.
You can specify one of -h, -R, -L, -z, -E, -r, -w, -v or no operation.
If no operation is specified, flashrom will only probe for flash chips.
It is recommended that if you try flashrom the first time on a system,
you run it in probe only mode and check the output. Also you are
advised to make a backup of your current ROM contents with -r before
you try to write a new image.
-r, --read <file>
Read flash ROM contents and save them into the given <file>.
-w, --write <file>
Write <file> into flash ROM.
-n, --noverify
Skip the automatic verification of flash ROM contents after
writing. Using this option is not recommended, you should only
use it if you know what you are doing and if you feel that the
time for verification takes too long.
Typical usage is: flashrom -n -w file
This option is only useful in combination with --write.
-v, --verify <file>
Verify the flash ROM contents against the given <file>.
-E, --erase
Erase the flash ROM chip.
-V, --verbose
More verbose output.
-c, --chip <chipname>
Probe only for specified flash ROM chip. This option takes the
chip name as printed by flashrom -L without the vendor name.
Please note that the chip name is case sensitive.
-m, --mainboard [<vendor>:]<part>
Override mainboard settings.
flashrom reads the coreboot table to determine the current
mainboard. If no coreboot table could be read or if you want to
override these values, you can specify -m, e.g.:
flashrom --mainboard AGAMI:ARUMA -w agami_aruma.rom
See the ’Supported mainboards’ section in the output of
’flashrom -L’ for a list of boards which require the
specification of the board name, if no coreboot table is found.
-f, --force
Force one or more of the following actions:
* Force chip read and pretend the chip is there.
* Force chip access even if the chip is bigger than max decode
size for the flash bus.
* Force erase even if erase is known bad.
* Force write even if write is known bad.
-l, --layout <file>
Read ROM layout from <file>.
flashrom supports ROM layouts. This allows you to flash certain
parts of the flash chip only. A ROM layout file looks like
follows:
00000000:00008fff gfxrom
00009000:0003ffff normal
00040000:0007ffff fallback
i.e.:
startaddr:endaddr name
All addresses are offsets within the file, not absolute
addresses! If you only want to update the normal image in a ROM
you can say:
flashrom --layout rom.layout --image normal -w agami_aruma.rom
To update normal and fallback but leave the VGA BIOS alone, say:
flashrom -l rom.layout -i normal
-i fallback -w agami_aruma.rom
Currently overlapping sections are not supported.
-i, --image <name>
Only flash image <name> from flash layout.
-L, --list-supported
List the flash chips, chipsets, mainboards, and PCI card
"programmers" supported by flashrom.
There are many unlisted boards which will work out of the box,
without special support in flashrom. Please let us know if you
can verify that other boards work or do not work out of the box.
For verification you have to test an ERASE and/or WRITE
operation, so make sure you only do that if you have proper
means to recover from failure!
-z, --list-supported-wiki
Same as --list-supported, but outputs the supported hardware in
MediaWiki syntax, so that it can be easily pasted into the wiki
page at http://www.flashrom.org/. Please note that MediaWiki
output is not compiled in by default.
-p, --programmer <name>[:parameter[,parameter[,parameter]]]
Specify the programmer device. Currently supported are:
* internal (default, for in-system flashing in the mainboard)
* dummy (just prints all operations and accesses)
* nic3com (for flash ROMs on 3COM network cards)
* nicrealtek (for flash ROMs on Realtek network cards)
* nicsmc1211 (for flash ROMs on RTL8139-compatible SMC2 network
cards)
* gfxnvidia (for flash ROMs on NVIDIA graphics cards)
* drkaiser (for flash ROMs on Dr. Kaiser PC-Waechter PCI cards)
* satasii (for flash ROMs on Silicon Image SATA/IDE controllers)
* atahpt (for flash ROMs on Highpoint ATA/RAID controllers)
* it87spi (for flash ROMs behind an ITE IT87xx Super I/O LPC/SPI
translation unit)
* ft2232_spi (for flash ROMs attached to a FT2232H/FT4232H based
USB SPI programmer)
* serprog (for flash ROMs attached to Urja’s AVR programmer)
* buspirate_spi (for flash ROMs attached to a Bus Pirate)
Some programmers have optional or mandatory parameters which are
described in detail in the PROGRAMMER SPECIFIC INFO section.
Support for some programmers can be disabled at compile time.
flashrom -h lists all supported programmers.
-h, --help
Show a help text and exit.
-R, --version
Show version information and exit.
PROGRAMMER SPECIFIC INFO
Some programmer drivers accept further parameters to set programmer-
specific parameters. These parameters are separated from the programmer
name by a colon. While some programmers take arguments at fixed
positions, other programmers use a key/value interface in which the key
and value is separated by an equal sign and different pairs are
separated by a comma or a colon.
internal programmer
Some mainboards require to run mainboard specific code to enable
flash erase and write support (and probe support on old systems
with parallel flash). The mainboard brand and model (if it
requires specific code) is usually autodetected using one of the
following mechanisms: If your system is running coreboot, the
mainboard type is determined from the coreboot table, otherwise,
the mainboard is detected by examining the onboard PCI devices
and possibly DMI info. If PCI and DMI do not contain information
to uniquely identify the mainboard (which is the exception), it
might be necessary to specify the mainboard using the -m switch
(see above).
Some of these board-specific flash enabling functions (called
board enables) in flashrom have not yet been tested. If your
mainboard is detected needing an untested board enable function,
a warning message is printed and the board enable is not
executed, because a wrong board enable function might cause the
system to behave erratically, as board enable functions touch
the low-level internals of a mainboard. Not executing a board
enable function (if one is needed) might cause detection or
erasing failure. If your board protects only part of the flash
(commonly the top end, called boot block), flashrom might
encounter an error only after erasing the unprotected part, so
running without the board-enable function might be dangerous for
erase and write (which includes erase).
The suggested procedure for a mainboard with untested board
specific code is to first try to probe the ROM (just invoke
flashrom and check that it detects your flash chip type) without
running the board enable code (i.e. without any parameters). If
it finds your chip, fine, otherwise, retry probing your chip
with the board-enable code running, using
flashrom -p internal:boardenable=force
If your chip is still not detected, the board enable code seems
to be broken or the flash chip unsupported. Otherwise, make a
backup of your current ROM contents (using -r) and store it to a
medium outside of your computer, like an USB drive or a network
share. If you needed to run the board enable code already for
probing, use it for reading too. Now you can try to write the
new image. You should enable the board enable code in any case
now, as it has been written because it is known that
writing/erasing without the board enable is going to fail. In
any case (success or failure), please report to the flashrom
mailing list, see below.
On systems running coreboot, flashrom checks whether the desired
image matches your mainboard. This needs some special board ID
to be present in the image. If flashrom detects that the image
you want to write and the current board do not match, it will
refuse to write the image unless you specify
flashrom -p internal:boardmismatch=force
If your mainboard uses an ITE IT87 series Super I/O for
LPC<->SPI flash bus translation, flashrom should autodetect that
configuration. You can use
flashrom -p internal:it87spiport=portnum syntax as explained in
the it87spi programmer section to use a non-default port for
controlling the IT87 series Super I/O. In the unlikely case
flashrom doesn’t detect an active IT87 LPC<->SPI bridge, you can
try to force recognition by using the it87spi programmer.
Using flashrom on laptops is dangerous and may easily make your
hardware unusable (see also the BUGS section). The embedded
controller (EC) in these machines often interacts badly with
flashing. http://www.flashrom.org/Laptops has more information.
If flash is shared with the EC, erase is guaranteed to brick
your laptop and write is very likely to brick your laptop. Chip
read and probe may irritate your EC and cause fan failure,
backlight failure, sudden poweroff, and other nasty effects.
flashrom will attempt to detect laptops and abort immediately
for safety reasons. If you want to proceed anyway at your own
risk, use
flashrom -p internal:laptop=force_I_want_a_brick
You have been warned.
We will not help you if you force flashing on a laptop because
this is a really dumb idea.
dummy programmer
An optional parameter specifies the bus types it should support.
For that you have to use the flashrom -p dummy:type syntax where
type can be any comma-separated combination of parallel lpc fwh
spi all in any order.
Example: flashrom -p dummy:lpc,fwh
nic3com, nicrealtek, nicsmc1211, gfxnvidia, satasii and atahpt
programmers
These programmers have an option to specify the PCI address of
the card your want to use, which must be specified if more than
one card supported by the selected programmer is installed in
your system. The syntax is flashrom -p xxxx:bb:dd.f , where xxxx
is the name of the programmer bb is the PCI bus number, dd is
the PCI device number, and f is the PCI function number of the
desired NIC.
Example: flashrom -p nic3com:05:04.0
it87spi programmer
An optional parameter sets the I/O base port of the IT87* SPI
controller interface to the port specified in the parameter
instead of using the port address set by the BIOS. For that you
have to use the flashrom -p it87spi:it87spiport=portnum syntax
where portnum is an I/O port number which must be a multiple of
8.
ft2232_spi programmer
An optional parameter species the controller type and
interface/port it should support. For that you have to use the
flashrom -p ft2232_spi:model,port=interface syntax where model
can be any of 2232H 4232H and interface can be any of A B. The
default model is 4232H and the default interface is B.
serprog programmer
A mandatory parameter specifies either a serial device/baud
combination or an IP/port combination for communication with the
programmer. In the device/baud combination, the device has to
start with a slash. For serial, you have to use the flashrom -p
serprog:/dev/device:baud syntax and for IP, you have to use
flashrom -p serprog:ip:port instead. More information about
serprog is available in serprog-protocol.txt in the source
distribution.
buspirate_spi programmer
A required dev parameter specifies the Bus Pirate device node
and an optional spispeed parameter specifies the frequency of
the SPI bus. The parameter delimiter is a comma. Syntax is
flashrom -p buspirate_spi:dev=/dev/device,spispeed=frequency
where frequency can be any of 30k 125k 250k 1M 2M 2.6M 4M 8M (in
Hz). The default is the maximum frequency of 8 MHz.
EXIT STATUS
flashrom exits with 0 on success, 1 on most failures but with 2 if
/dev/mem (/dev/xsvc on Solaris) can not be opened and with 3 if a call
to mmap() fails.
BUGS
Please report any bugs at
http://www.flashrom.org/trac/flashrom/newticket, or on the flashrom
mailing list at http://www.flashrom.org/mailman/listinfo/flashrom.
Using flashrom on laptops is dangerous and may easily make your
hardware unusable unless you can desolder the flash chip and have a
full flash chip backup. This is caused by the embedded controller (EC)
present in many laptops, which interacts badly with any flash attempts.
This is a hardware limitation and flashrom will attempt to detect it
and abort immediately for safety reasons.
LICENCE
flashrom is covered by the GNU General Public License (GPL), version 2.
Some files are additionally available under the GPL (version 2, or any
later version).
COPYRIGHT
Please see the individual files.
AUTHORS
Carl-Daniel Hailfinger
Claus Gindhart <claus.gindhart@kontron.com>
Dominik Geyer <dominik.geyer@kontron.com>
Eric Biederman
Giampiero Giancipoli <gianci@email.it>
Joe Bao <Zheng.Bao@amd.com>
Luc Verhaegen <libv@skynet.be>
Li-Ta Lo
Markus Boas <ryven@ryven.de>
Michael Karcher <flashrom@mkarcher.dialup.fu-berlin.de>
Nikolay Petukhov <nikolay.petukhov@gmail.com>
Peter Stuge <peter@stuge.se>
Reinder E.N. de Haan <lb_reha@mveas.com>
Ronald G. Minnich <rminnich@gmail.com>
Ronald Hoogenboom <ronald@zonnet.nl>
Sean Nelson <audiohacked@gmail.com>
Stefan Reinauer <stepan@coresystems.de>
Stefan Wildemann <stefan.wildemann@kontron.com>
Steven James <pyro@linuxlabs.com>
Uwe Hermann <uwe@hermann-uwe.de>
Wang Qingpei
Yinghai Lu
some others
This manual page was written by Uwe Hermann <uwe@hermann-uwe.de> and
Carl-Daniel Hailfinger. It is licensed under the terms of the GNU GPL
(version 2 or later).
Apr 29, 2010