This is the universal LinuxBIOS flash utility.

build requirements
------------------

To build the flashrom utility you need to have the following packages
installed on your linux system:

* pciutils
* pciutils-devel


usage
-----

usage: ./flashrom [-rwvE] [-V] [-c chipname] 
                           [-s exclude_start] [-e exclude_end] [file]

   -r | --read:   read flash and save into file
   -w | --write:  write file into flash (default when file is specified)
   -v | --verify: verify flash against file
   -E | --erase: Erase flash device
   -V | --verbose: more verbose output

   -c | --chip <chipname>: probe only for specified flash chip
   -s | --estart <addr>: exclude start position
   -e | --eend <addr>: exclude end postion
   -m | --mainboard <vendor:part>: override mainboard settings
   -l | --layout <file.layout>: read rom layout from file
   -i | --image <name>: only flash image name from flash layout

 If no file is specified, then all that happens
 is that flash info is dumped and the flash chip is set to writable.


LinuxBIOS table and Mainboard identification
--------------------------------------------

flashrom reads the LinuxBIOS table to determine the current mainboard.
(Parse DMI as well in future?) If no LinuxBIOS table could be read
or if you want to override these values, you can to specify -m ie.:

     flashrom -w --mainboard ISLAND:ARUMA island_aruma.rom


rom layout support
------------------

flashrom supports rom layouts. This allows 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 -w --layout rom.layout --image normal island_aruma.rom
     
To update normal and fallback but leave the vga bios alone, say:

     flashrom -w -l rom.layout -i normal -i fallback island_aruma.rom
 
Currently overlapping sections are not spported.

rom layouts should replace the -s and -e option since they are more 
flexible and they should lead to a rom update file format with the 
rom layout and the rom image in one file (cpio, zip or something?)


DOC support
-----------

DISK on Chip support is currently disabled since it is considered unstable. 
Change CFLAGS in the Makefile to enable it.


