463 lines
18 KiB
Plaintext
463 lines
18 KiB
Plaintext
Welcome to OpenOCD!
|
|
===================
|
|
|
|
OpenOCD provides on-chip programming and debugging support with a
|
|
layered architecture of JTAG interface and TAP support, debug target
|
|
support (e.g. ARM, MIPS), and flash chip drivers (e.g. CFI, NAND, etc.).
|
|
Several network interfaces are available for interactiving with OpenOCD:
|
|
HTTP, telnet, TCL, and GDB. The GDB server enables OpenOCD to function
|
|
as a "remote target" for source-level debugging of embedded systems
|
|
using the GNU GDB program.
|
|
|
|
This README file contains an overview of the following topics:
|
|
- how to find and build more OpenOCD documentation,
|
|
- the build process
|
|
- packaging tips.
|
|
- configuration options
|
|
|
|
=====================
|
|
OpenOCD Documentation
|
|
=====================
|
|
|
|
In addition to in-tree documentation, the latest documentation may be
|
|
viewed on-line at the following URLs:
|
|
|
|
OpenOCD User's Guide:
|
|
http://openocd.sourceforge.net/doc/html/index.html
|
|
|
|
OpenOCD Developer's Manual:
|
|
http://openocd.sourceforge.net/doc/doxygen/html/index.html
|
|
|
|
These reflect the latest development versions, so the following section
|
|
introduces how to build the complete documentation from the package.
|
|
|
|
|
|
For more information, refer to these documents or contact the developers
|
|
by subscribing to the OpenOCD developer mailing list:
|
|
|
|
openocd-devel@lists.sourceforge.net
|
|
|
|
Building the OpenOCD Documentation
|
|
----------------------------------
|
|
|
|
The OpenOCD User's Guide can be produced in two different format:
|
|
|
|
# If PDFVIEWER is set, this creates and views the PDF User Guide.
|
|
make pdf && ${PDFVIEWER} doc/openocd.pdf
|
|
|
|
# If HTMLVIEWER is set, this creates and views the HTML User Guide.
|
|
make html && ${HTMLVIEWER} doc/openocd.html/index.html
|
|
|
|
The OpenOCD Developer Manual contains information about the internal
|
|
architecture and other details about the code:
|
|
|
|
# NB! make sure doxygen is installed, type doxygen --version
|
|
make doxygen
|
|
|
|
# If HTMLVIEWER is set, this views the HTML Doxygen output.
|
|
${HTMLVIEWER} doxygen/index.html
|
|
|
|
The remaining sections describe how to configure the system such that
|
|
you can build the in-tree documentation.
|
|
|
|
==================
|
|
Installing OpenOCD
|
|
==================
|
|
|
|
On Linux, you may have permissions problems to address. The best way
|
|
to do this is to use the contrib/openocd.udev rules file. It probably
|
|
belongs somewhere in /etc/udev/rules.d, but consult your operating
|
|
system documentation to be sure. In particular, make sure that it
|
|
matches the syntax used by your operating system's version of udev.
|
|
|
|
A Note to OpenOCD Users
|
|
-----------------------
|
|
|
|
If you would rather be working "with" OpenOCD rather than "on" it, your
|
|
operating system or JTAG interface supplier may provide binaries for
|
|
you in a convenient-enough package.
|
|
|
|
Such packages may be more stable than git mainline, where bleeding-edge
|
|
development takes place. These "Packagers" produce binary releases of
|
|
OpenOCD after the developers produces new "release" versions of the
|
|
source code. Previous versions of OpenOCD cannot be used to diagnose
|
|
problems with the current release, so users are encouraged to keep in
|
|
contact with their distribution package maintainers or interface vendors
|
|
to ensure suitable upgrades appear regularly.
|
|
|
|
Users of these binary versions of OpenOCD must contact their Packager to
|
|
ask for support or newer versions of the binaries; the OpenOCD
|
|
developers do not support packages directly.
|
|
|
|
A Note to OpenOCD Packagers
|
|
---------------------------
|
|
|
|
You are a PACKAGER of OpenOCD if you:
|
|
|
|
- Sell dongles: and include pre-built binaries
|
|
- Supply tools: A complete development solution
|
|
- Supply IDEs: like Eclipse, or RHIDE, etc.
|
|
- Build packages: RPM files, or DEB files for a Linux Distro
|
|
|
|
As a PACKAGER, you will experience first reports of most issues.
|
|
When you fix those problems for your users, your solution may help
|
|
prevent hundreds (if not thousands) of other questions from other users.
|
|
|
|
If something does not work for you, please work to inform the OpenOCD
|
|
developers know how to improve the system or documentation to avoid
|
|
future problems, and follow-up to help us ensure the issue will be fully
|
|
resolved in our future releases.
|
|
|
|
That said, the OpenOCD developers would also like you to follow a few
|
|
suggestions:
|
|
|
|
- Send patches, including config files, upstream.
|
|
- Always build with printer ports enabled.
|
|
- Use libftdi + libusb for FT2232 support.
|
|
|
|
Remember, the FTD2XX library cannot be used in binary distributions, due
|
|
to restrictions of the GPL v2.
|
|
|
|
================
|
|
Building OpenOCD
|
|
================
|
|
|
|
The INSTALL file contains generic instructions for running 'configure'
|
|
and compiling the OpenOCD source code. That file is provided by default
|
|
for all GNU automake packages. If you are not familiar with the GNU
|
|
autotools, then you should read those instructions first.
|
|
|
|
The remainder of this document tries to provide some instructions for
|
|
those looking for a quick-install.
|
|
|
|
OpenOCD Dependencies
|
|
--------------------
|
|
|
|
Presently, GCC is required to build OpenOCD. The developers have begun
|
|
to enforce strict code warnings (-Wall, -Werror, -Wextra, and more) and
|
|
use C99-specific features: inline functions, named initializers, mixing
|
|
declarations with code, and other tricks. While it may be possible to
|
|
use other compilers, they must be somewhat modern and could require
|
|
extending support to conditionally remove GCC-specific extensions.
|
|
|
|
Also, you need to install the appropriate driver files, if you want to
|
|
build support for a USB or FTDI-based interface:
|
|
|
|
- ft2232, jlink, rlink, vsllink, usbprog, arm-jtag-ew:
|
|
- libusb: required for portable communication with USB dongles
|
|
- ft2232 also requires:
|
|
- libftdi: http://www.intra2net.com/opensource/ftdi/ *OR*
|
|
- ftd2xx: http://www.ftdichip.com/Drivers/D2XX.htm,
|
|
or the Amontec version (from http://www.amontec.com), for
|
|
easier support of JTAGkey's vendor and product IDs.
|
|
|
|
Many Linux distributions provide these packages through their automated
|
|
installation and update mechanisms; however, some Linux versions include
|
|
older versions of libftdi. In particular, using Ubuntu 8.04 has been
|
|
problematic, but newer versions of Ubuntu do not have this problem.
|
|
|
|
Compiling OpenOCD
|
|
-----------------
|
|
|
|
To build OpenOCD (on both Linux and Cygwin), use the following sequence
|
|
of commands:
|
|
|
|
./configure [with some options listed in the next section]
|
|
make
|
|
make install
|
|
|
|
The 'configure' step generates the Makefiles required to build OpenOCD,
|
|
usually with one or more options provided to it. The first 'make' step
|
|
will build OpenOCD and place the final executable in ./src/. The
|
|
final (optional) step, ``make install'', places all of the files in the
|
|
required location.
|
|
|
|
Cross-Compiling Options
|
|
-----------------------
|
|
|
|
To cross-compile, you must specify both --build and --host options to
|
|
the 'configure' script. For example, you can configure OpenOCD to
|
|
cross-compile on a x86 Linux host to run on Windows (MinGW32), you could
|
|
use the following configuration options:
|
|
|
|
./configure --build=i686-pc-linux-gnu --host=i586-mingw32msvc ...
|
|
|
|
Likewise, the following options allow OpenOCD to be cross-compiled for
|
|
an ARM target on the same x86 host:
|
|
|
|
./configure --build=i686-pc-linux-gnu --host=arm-elf ...
|
|
|
|
Both must be specified to work around bugs in autoconf.
|
|
|
|
Scripts for producing ARM cross-compilers can be found on the web with a
|
|
little searching. A script to produce an x86 Linux-hosted MinGW32
|
|
cross-compiler can be downloaded from the following URL:
|
|
|
|
http://www.mingw.org/wiki/LinuxCrossMinGW
|
|
|
|
Configuration Options
|
|
---------------------
|
|
|
|
The configure script takes numerous options, specifying which JTAG
|
|
interfaces should be included (among other things). The following list
|
|
of options was extracted from the output of './configure --help'. Other
|
|
options may be available there:
|
|
|
|
--enable-maintainer-mode enable make rules and dependencies not useful
|
|
(and sometimes confusing) to the casual installer
|
|
NOTE: This option is *required* for GIT builds!
|
|
It should *not* be used to build a release.
|
|
|
|
--enable-dummy Enable building the dummy JTAG port driver
|
|
|
|
--enable-parport Enable building the pc parallel port driver
|
|
--disable-parport-ppdev Disable use of ppdev (/dev/parportN) for parport
|
|
(for x86 only)
|
|
--enable-parport-giveio Enable use of giveio for parport (for CygWin only)
|
|
|
|
--enable-ftdi Enable building support for the MPSSE mode of FTDI
|
|
based devices, using libusb-1.0 in asynchronous mode
|
|
|
|
--enable-ft2232_libftdi Enable building support for FT2232 based devices
|
|
using the libftdi driver, opensource alternate of
|
|
FTD2XX
|
|
--enable-ft2232_ftd2xx Enable building support for FT2232 based devices
|
|
using the FTD2XX driver from ftdichip.com
|
|
|
|
--enable-usb_blaster_libftdi
|
|
Enable building support for the Altera USB-Blaster
|
|
using the libftdi driver, opensource alternate of
|
|
FTD2XX
|
|
--enable-usb_blaster_ftd2xx
|
|
Enable building support for the Altera USB-Blaster
|
|
using the FTD2XX driver from ftdichip.com
|
|
|
|
--enable-amtjtagaccel Enable building the Amontec JTAG-Accelerator driver
|
|
|
|
--enable-zy1000-master Use ZY1000 JTAG master registers
|
|
--enable-zy1000 Enable ZY1000 interface
|
|
|
|
--enable-ioutil Enable ioutil functions - useful for standalone
|
|
OpenOCD implementations
|
|
|
|
--enable-ep93xx Enable building support for EP93xx based SBCs
|
|
|
|
--enable-at91rm9200 Enable building support for AT91RM9200 based SBCs
|
|
|
|
--enable-gw16012 Enable building support for the Gateworks GW16012
|
|
JTAG Programmer
|
|
|
|
--enable-presto_libftdi Enable building support for ASIX Presto Programmer
|
|
using the libftdi driver
|
|
--enable-presto_ftd2xx Enable building support for ASIX Presto Programmer
|
|
using the FTD2XX driver
|
|
|
|
--enable-usbprog Enable building support for the usbprog JTAG
|
|
Programmer
|
|
|
|
--enable-oocd_trace Enable building support for some prototype
|
|
OpenOCD+trace ETM capture hardware
|
|
|
|
--enable-jlink Enable building support for the Segger J-Link JTAG
|
|
Programmer
|
|
|
|
--enable-vsllink Enable building support for the Versaloon-Link JTAG
|
|
Programmer
|
|
|
|
--enable-rlink Enable building support for the Raisonance RLink
|
|
JTAG Programmer
|
|
--enable-ulink Enable building support for the Keil ULINK JTAG
|
|
Programmer
|
|
--enable-arm-jtag-ew Enable building support for the Olimex ARM-JTAG-EW
|
|
Programmer
|
|
|
|
--enable-buspirate Enable building support for the Buspirate
|
|
|
|
--enable-stlink Enable building support for the ST-Link JTAG
|
|
Programmer
|
|
--enable-ti-icdi Enable building support for the TI/Stellaris ICDI
|
|
JTAG Programmer
|
|
|
|
--enable-osbdm Enable building support for the OSBDM (JTAG only)
|
|
Programmer
|
|
|
|
--enable-opendous Enable building support for the estick/opendous JTAG
|
|
Programmer
|
|
--enable-sysfsgpio Enable building support for programming driven via
|
|
sysfs gpios.
|
|
|
|
--enable-minidriver-dummy
|
|
Enable the dummy minidriver.
|
|
|
|
--disable-internal-jimtcl
|
|
Disable building internal jimtcl
|
|
--enable-libusb0 Use libusb-0.1 library for USB JTAG devices
|
|
--enable-remote-bitbang Enable building support for the Remote Bitbang jtag
|
|
driver
|
|
|
|
--disable-doxygen-html Disable building Doxygen manual as HTML.
|
|
--enable-doxygen-pdf Enable building Doxygen manual as PDF.
|
|
|
|
Miscellaneous Configure Options
|
|
-------------------------------
|
|
|
|
The following additional options may also be useful:
|
|
|
|
--disable-assert turn off assertions
|
|
|
|
--enable-verbose Enable verbose JTAG I/O messages (for debugging).
|
|
--enable-verbose-jtag-io
|
|
Enable verbose JTAG I/O messages (for debugging).
|
|
--enable-verbose-usb-io Enable verbose USB I/O messages (for debugging)
|
|
--enable-verbose-usb-comms
|
|
Enable verbose USB communication messages (for
|
|
debugging)
|
|
--enable-malloc-logging Include free space in logging messages (requires
|
|
malloc.h).
|
|
|
|
--disable-gccwarnings Disable extra gcc warnings during build.
|
|
--disable-wextra Disable extra compiler warnings
|
|
--disable-werror Do not treat warnings as errors
|
|
|
|
--disable-option-checking
|
|
Ignore unrecognized --enable and --with options.
|
|
--disable-dependency-tracking speeds up one-time build
|
|
--enable-shared[=PKGS] build shared libraries [default=no]
|
|
--enable-static[=PKGS] build static libraries [default=yes]
|
|
|
|
Parallel Port Dongles
|
|
---------------------
|
|
|
|
If you want to access the parallel port using the PPDEV interface you
|
|
have to specify both --enable-parport AND --enable-parport-ppdev, since the
|
|
the later option is an option to the parport driver (see
|
|
http://forum.sparkfun.com/viewtopic.php?t=3795 for more info).
|
|
|
|
The same is true for the --enable-parport-giveio option, you
|
|
have to use both the --enable-parport AND the --enable-parport-giveio
|
|
option if you want to use giveio instead of ioperm parallel port access
|
|
method.
|
|
|
|
FT2232C Based USB Dongles
|
|
-------------------------
|
|
|
|
There are 2 methods of using the FTD2232, either (1) using the
|
|
FTDICHIP.COM closed source driver, or (2) the open (and free) driver
|
|
libftdi.
|
|
|
|
Using LIBFTDI
|
|
-------------
|
|
|
|
The libftdi source code can be download from the following website:
|
|
|
|
http://www.intra2net.com/en/developer/libftdi/download.php
|
|
|
|
For both Linux and Windows, both libusb and libftdi must be built and
|
|
installed. To use the newer FT2232H chips, supporting RTCK and USB high
|
|
speed (480 Mbps), use libftdi version 0.17 or newer. Many Linux
|
|
distributions provide suitable packages for these libraries.
|
|
|
|
For Windows, libftdi is supported with versions 0.14 and later.
|
|
|
|
With these prerequisites met, configure the libftdi solution like this:
|
|
|
|
./configure --prefix=/path/for/your/install --enable-ft2232_libftdi
|
|
|
|
Then type ``make'', and perhaps ``make install''.
|
|
|
|
Using FTDI's FTD2XX
|
|
-------------------
|
|
|
|
The (closed source) FTDICHIP.COM solution is faster on MS-Windows. That
|
|
is the motivation for supporting it even though its licensing restricts
|
|
it to non-redistributable OpenOCD binaries, and it is not available for
|
|
all operating systems used with OpenOCD. You may, however, build such
|
|
copies for personal use.
|
|
|
|
The FTDICHIP drivers come as either a (win32) ZIP file, or a (Linux)
|
|
TAR.GZ file. You must unpack them ``some where'' convenient. As of this
|
|
writing FTDICHIP does not supply means to install these files "in an
|
|
appropriate place."
|
|
|
|
If your distribution does not package these, there are several
|
|
'./configure' options to solve this problem:
|
|
|
|
--with-ftd2xx-win32-zipdir
|
|
Where (CYGWIN/MINGW) the zip file from ftdichip.com
|
|
was unpacked <default=search>
|
|
--with-ftd2xx-linux-tardir
|
|
Where (Linux/Unix) the tar file from ftdichip.com
|
|
was unpacked <default=search>
|
|
--with-ftd2xx-lib Use static or shared ftd2xx libs on default static
|
|
|
|
If you are using the FTDICHIP.COM driver, download and unpack the
|
|
Windows or Linux FTD2xx drivers from the following location:
|
|
|
|
http://www.ftdichip.com/Drivers/D2XX.htm
|
|
|
|
Remember, this library is binary-only, while OpenOCD is licenced
|
|
according to GNU GPLv2 without any exceptions. That means that
|
|
_distributing_ copies of OpenOCD built with the FTDI code would violate
|
|
the OpenOCD licensing terms.
|
|
|
|
Linux Notes
|
|
***********
|
|
|
|
The Linux tar.gz archive contains a directory named libftd2xx0.4.16
|
|
(or similar). Assuming that you have extracted this archive in the same
|
|
directory as the OpenOCD package, you could configure with options like
|
|
the following:
|
|
|
|
./configure \
|
|
--enable-ft2232_ftd2xx \
|
|
--with-ft2xx-linux-tardir=../libftd2xx0.4.16 \
|
|
... other options ...
|
|
|
|
Note that on Linux there is no good reason to use these FTDI binaries;
|
|
they are no faster (on Linux) than libftdi, and cause licensing issues.
|
|
|
|
==========================
|
|
Obtaining OpenOCD From GIT
|
|
==========================
|
|
|
|
You can download the current GIT version with a GIT client of your
|
|
choice from the main repository:
|
|
|
|
git://openocd.git.sourceforge.net/gitroot/openocd/openocd
|
|
|
|
You may prefer to use a mirror:
|
|
|
|
http://repo.or.cz/r/openocd.git
|
|
git://repo.or.cz/openocd.git
|
|
|
|
Using the GIT command line client, you might use the following command
|
|
to set up a local copy of the current repository (make sure there is no
|
|
directory called "openocd" in the current directory):
|
|
|
|
git clone git://openocd.git.sourceforge.net/gitroot/openocd/openocd
|
|
|
|
Then you can update that at your convenience using
|
|
|
|
git pull
|
|
|
|
There is also a gitweb interface, which you can use either to browse
|
|
the repository or to download arbitrary snapshots using HTTP:
|
|
|
|
http://openocd.git.sourceforge.net/git/gitweb.cgi?p=openocd/openocd
|
|
http://repo.or.cz/w/openocd.git
|
|
|
|
Snapshots are compressed tarballs of the source tree, about 1.3 MBytes
|
|
each at this writing.
|
|
|
|
|
|
Tips For Building From a GIT Repository
|
|
---------------------------------------
|
|
|
|
Building OpenOCD from a repository requires a recent version of the GNU
|
|
autotools (autoconf >= 2.59 and automake >= 1.9).
|
|
|
|
1) Run './bootstrap' to create the 'configure' script and prepare
|
|
the build process for your host system.
|
|
|
|
2) Run './configure --enable-maintainer-mode' with other options.
|