-------------------------------------------------------------------------------
flashprog README
-------------------------------------------------------------------------------

flashprog is a utility for detecting, reading, writing, verifying and erasing
flash chips. It is 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 flash chips (most commonly found in SOIC8, DIP8,
SOIC16, WSON8, PLCC32, DIP32, TSOP32, and TSOP40 packages), which use various
protocols such as LPC, FWH, parallel flash, or SPI.

Do not use flashprog on laptops (yet)! The embedded controller (EC) present in
many laptops might interact badly with any attempts to communicate with the
flash chip and may brick your laptop.

Please make a backup of your flash chip before writing to it.

Please see the flashprog(8) manpage.


Packaging
---------

To package flashprog and remove dependencies on Git, either use
make export
or
make tarball

'make export' will export all flashprog files from the Git repository at
revision HEAD into a directory named "$EXPORTDIR/flashprog-$RELEASENAME"
and will additionally add a "versioninfo.inc" file in that directory to
contain the Git revision of the exported tree and a date for the manual
page.

'make tarball' will simply tar up the result of make export and compress
it with bzip2.

The snapshot tarballs are the result of 'make tarball' and require no
further processing.


Build Instructions
------------------

To build flashprog you need to install the following software:

 * pciutils+libpci (if you want support for mainboard or PCI device flashing)
 * libusb (if you want FT2232, Dediprog or USB-Blaster support)
 * libftdi (if you want FT2232 or USB-Blaster support)
 * libjaylink (if you want support for SEGGER J-Link and compatible devices)

Linux et al:

 * pciutils / libpci
 * pciutils-devel / pciutils-dev / libpci-dev
 * zlib-devel / zlib1g-dev (needed if libpci was compiled with libz support)
 * libgpiod-dev (if you want support for Linux GPIO devices)

On FreeBSD, you need the following ports:

 * devel/gmake
 * devel/libpci

On OpenBSD, you need the following ports:

 * devel/gmake
 * sysutils/pciutils

To compile on Linux, use:

 make

To compile on FreeBSD, OpenBSD or DragonFly BSD, use:

 gmake

To compile on Nexenta, use:

 make

To compile on Solaris, use:

 gmake LDFLAGS="-L$pathtolibpci" CC="gcc -I$pathtopciheaders" CFLAGS=-O2

To compile on NetBSD (with pciutils, libftdi, libusb installed in /usr/pkg/), use:

 gmake

To compile and run on Darwin/Mac OS X:

 Install DirectHW from coresystems GmbH.
 DirectHW is available at http://www.coreboot.org/DirectHW .

To cross-compile on Linux for DOS:

 Get packages of the DJGPP cross compiler and install them:
 djgpp-filesystem djgpp-gcc djgpp-cpp djgpp-runtime djgpp-binutils
 As an alternative, the DJGPP web site offers packages for download as well:
 djcross-binutils-2.29.1-1ap.x86_64.rpm
 djcross-gcc-7.2.0-1ap.x86_64.rpm
 djcrx-2.05-5.x86_64.rpm
 The cross toolchain packages for your distribution may have slightly different
 names (look for packages named *djgpp*).

 Alternatively, you could use a script to build it from scratch:
 https://github.com/andrewwutw/build-djgpp

 You will need the libpci and libgetopt library source trees and
 their compiled static libraries and header files installed in some
 directory say libpci-libgetopt/, which will be later specified with
 LIBS_BASE parameter during flashprog compilation. Easiest way to
 handle it is to put pciutils, libgetopt and flashprog directories
 in one subdirectory. There will be an extra subdirectory libpci-libgetopt
 created, which will contain compiled libpci and libgetopt.

 Download pciutils 3.5.6 and apply http://flashprog.org/File:Pciutils-3.5.6.patch.gz
 Compile pciutils, using following command line:

 make ZLIB=no DNS=no HOST=i386-djgpp-djgpp CROSS_COMPILE=i586-pc-msdosdjgpp- \
     PREFIX=/ DESTDIR=$PWD/../libpci-libgetopt  \
     STRIP="--strip-program=i586-pc-msdosdjgpp-strip -s" install install-lib

 Download and compile with 'make' http://flashprog.org/File:Libgetopt.tar.gz

 Copy the libgetopt.a to ../libpci-libgetopt/lib and
 getopt.h to ../libpci-libgetopt/include

 Enter the flashprog directory.

 make CC=i586-pc-msdosdjgpp-gcc STRIP=i586-pc-msdosdjgpp-strip \
	LIBS_BASE=../libpci-libgetopt/ HAS_LIBPCI=yes CONFIG_LIBPCI_LDFLAGS=-lpci \
	strip

 If you like, you can compress the resulting executable with UPX:

 upx -9 flashprog.exe

 To run flashprog.exe, download http://flashprog.org/File:Csdpmi7b.zip and
 unpack CWSDPMI.EXE into the current directory or one in PATH.

To cross-compile on Linux for Windows:

 Get packages of the MinGW cross compiler and install them:
 mingw32-filesystem mingw32-cross-cpp mingw32-cross-binutils mingw32-cross-gcc
 mingw32-runtime mingw32-headers
 The cross toolchain packages for your distribution may have slightly different
 names (look for packages named *mingw*).
 PCI-based programmers (internal etc.) are not supported on Windows.
 Run (change CC= and STRIP= settings where appropriate)
 make CC=i686-w64-mingw32-gcc STRIP=i686-w64-mingw32-strip

Processor architecture dependent features:

 On non-x86 architectures a few programmers don't work (yet) because they
 use port-based I/O which is not directly available on non-x86. Those
 programmers will be disabled automatically if you run "make".

Compiler quirks:

If you are using clang and if you want to enable only one driver, you may hit an
overzealous compiler warning from clang. Compile with "make WARNERROR=no" to
force it to continue and enjoy.

Installation
------------

In order to install flashprog and the manpage into /usr/local, type:

 make install

For installation in a different directory use DESTDIR, e.g. like this:

 make DESTDIR=/usr install

If you have insufficient permissions for the destination directory, use sudo
by adding sudo in front of the commands above.


Contact
-------

The official flashprog website is:

  http://www.flashprog.org/

Available contact methods are

  https://www.flashprog.org/Contact
