rtos: Rewrite rtos_qsymbol() and fix auto-detect false positive
[fw/openocd] / README
diff --git a/README b/README
index 1d9bd5ab732152afa801e5764a05051153536c3d..3a473c7bcca07d9d2e184855a038f5811b108485 100644 (file)
--- a/README
+++ b/README
-                                    OpenOCD
+Welcome to OpenOCD!
+===================
 
-                        Free and Open On-Chip Debugging, In-System Programming 
-                                                  and Boundary-Scan Testing
-                                 Copyright (c) 2004-2007 Dominic Rath
+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.
 
-The debugger uses an IEEE 1149-1 compliant JTAG TAP bus master to access on-chip
-debug functionality available on ARM7 and ARM9 based microcontrollers /
-system-on-chip solutions.
+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
 
-User interaction is realized through a telnet command line interface and a gdb
-(The GNU Debugger) remote protocol server.
+=====================
+OpenOCD Documentation
+=====================
 
-1. JTAG hardware
+In addition to in-tree documentation, the latest documentation may be
+viewed on-line at the following URLs:
 
-Currently, OpenOCD supports the following JTAG interfaces:
+ OpenOCD User's Guide:
+    http://openocd.sourceforge.net/doc/html/index.html
 
-- Parallel port wigglers. These devices connect to a PC's parallel port,
-providing direct access to the JTAG lines. The OpenOCD contains descriptions
-of a few Wiggler layouts, including the original 'Wiggler' design. Other
-layouts (i.e. mapping of parallel port pins to JTAG lines) can be added easily.
-Typical Wiggler speeds are around 12kByte/s code download to an ARM7's RAM.
+ OpenOCD Developer's Manual:
+    http://openocd.sourceforge.net/doc/doxygen/html/index.html
 
-The list of supported parallel port devices includes:
+These reflect the latest development versions, so the following section
+introduces how to build the complete documentation from the package.
 
-  * Macraigor Wiggler JTAG cable
-  * Gateworks GW16012 JTAG programmer
-  * Xilinx DLC5 JTAG parallel cable III
-  * Ka-Ro TRITON starterkit II JTAG cable
-  * Lattice parallel port JTAG cable
-  * ST FlashLINK programming cable
-  * Wiggler 2 cable (basically a wiggler with an LED)
 
-- The Amontec JTAG Accelerator. This is a configuration for Amontec's Chameleon
-dongle, a parallel port interface based on a Xilinx CoolRunner CPLD. It uses
-the IEEE1284 EPP parallel port specification, providing many times the
-performance achievable with wiggler-style devices. Additional information is
-available on www.amontec.com.
-Typical JTAG Accelerator speeds are around 120-160kByte/s to an ARM7's RAM.
+For more information, refer to these documents or contact the developers
+by subscribing to the OpenOCD developer mailing list:
 
-- FTDI FT2232 based USB devices. The FT2232 (but not FT232 or FT245) features a
-multi-protocol synchronous serial engine (MPSSE) that can be used to run the
-serial JTAG protocol. There are several implemenations of FT2232 based devices:
+       openocd-devel@lists.sourceforge.net
 
-* USBJTAG: http://www.fh-augsburg.de/~hhoegl/proj/usbjtag/usbjtag.html
-The USBJTAG was designed by Prof. Hubert Hoegl to provide a high-speed USB
-interface for use with the OpenOCD. Schematics are available at the USBJTAG
-website, and a homebrew device can easily be built using the FTDI evaluation
-module DLP2232M.
+Building the OpenOCD Documentation
+----------------------------------
 
-* OOCD-Link: http://www.joernonline.de/dw/doku.php?id=en:projects:oocdlink
-Similar to the USBJTAG, this design comes with free schematics, too.
+The OpenOCD User's Guide can be produced in two different format:
 
-* Amontec JTAGkey: www.amontec.com
-The Amontec JTAGkey offers support for a wide variety of target voltages from
-1.4V to 5V. It also allows the JTAG lines and reset signals to be tri-stated,
-allowing easy interfacing with a wide variety of targets.
+  # If PDFVIEWER is set, this creates and views the PDF User Guide.
+  make pdf && ${PDFVIEWER} doc/openocd.pdf
 
-* Amontec JTAGkey-Tiny: www.amontec.com
-The Amontec JTAGkey offers support for a wide variety of target voltages from
-2.8V to 5V. It also allows the reset signals to be tri-stated, allowing easy
-interfacing with a wide variety of targets.
+  # If HTMLVIEWER is set, this creates and views the HTML User Guide.
+  make html && ${HTMLVIEWER} doc/openocd.html/index.html
 
-* Olimex ARM-USB-OCD: www.olimex.com
-The Olimex ARM-USB-OCD offers support for a wide vriety of target voltages from
-2.0V to 5V. It also allows targets to be powered from the ARM-USB-OCD and
-features and additional RS232 UART.
+The OpenOCD Developer Manual contains information about the internal
+architecture and other details about the code:
 
-* eVerve Signalyzer: www.signalyzer.com
-The Signalyzer offers support for a wide variety of target voltages from 1.2V to
-5.5V. A second connector provides access to a TTL level UART.
+  # NB! make sure doxygen is installed, type doxygen --version
+  make doxygen
 
-* TinCanTools 'Flyswatter' USB JTAG programmer.
+  # If HTMLVIEWER is set, this views the HTML Doxygen output.
+  ${HTMLVIEWER} doxygen/index.html
 
-* Turtelizer 2: http://www.ethernut.de/en/hardware/turtelizer/index.html
-Another USB JTAG programmer, with freely available schematics. It supports
-target voltages from 1.65V to 5.5V.
+The remaining sections describe how to configure the system such that
+you can build the in-tree documentation.
 
-* Hitex STR9-comStick: http://www.ehitex.de/p_info.php?products_id=292
-A STR912FW44x microcontroller "board" with USB and JTAG functionality.
+==================
+Installing OpenOCD
+==================
 
-* Hitex STM32-PerformanceStick: http://www.hitex.com/stm32-stick/
-A STM32F103RBT6 microcontroller "board" with USB and JTAG functionality.
+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.
 
-* Luminary Micro development board evb_lm3s811 JTAG interface.
+A Note to OpenOCD Users
+-----------------------
 
-* ASIX PRESTO: http://www.asix-tools.com/prg_presto.htm
-The ASIX PRESTO is a USB JTAG programmer for a wide range of components, e.g.
-microcontrollers, serial EEPROM and Flash memory chips, CPLDs and others.
+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.
 
-* usbprog: http://www.embedded-projects.net/index.php?page_id=165
-The usbprog is a freely programmable USB adapter, which can (among other
-things) use a firmware which turns it into a JTAG programmer/debugger.
+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.
 
-* Altium universal JTAG cable
+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.
 
-All FT2232 based devices may be accessed using either FTDI's proprietary FTD2XX
-library (www.ftdichip.com) or using an open-source replacement from
-http://www.intra2net.com/de/produkte/opensource/ftdi/index.php, also included
-with many Linux distributions.
+A Note to OpenOCD Packagers
+---------------------------
 
-2. Supported cores
+You are a PACKAGER of OpenOCD if you:
 
-This version of openocd supports the following ARM7/9 cores:
+- 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
 
-- ARM7TDMI(-s)
-- ARM9TDMI
-- ARM920t
-- ARM922t
-- ARM926ej-s
-- ARM966e
-- Cortex-M3
+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.
 
-Support for Intel XScale CPUs is also included:
+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.
 
-- PXA25x
-- PXA27x
-- IXP42x
+That said, the OpenOCD developers would also like you to follow a few
+suggestions:
 
-And support for the Marvell Feroceon CPU core as found in the
-Orion SoC family is included as well.
+- Send patches, including config files, upstream.
+- Always build with printer ports enabled.
+- Use libftdi + libusb for FT2232 support.
 
-3. Host platforms
+Remember, the FTD2XX library cannot be used in binary distributions, due
+to restrictions of the GPL v2.
 
-OpenOCD was originally developed on x86-Linux, but has since then been ported
-to run on Windows/Cygwin, native Windows with MinGW, FreeBSD, IA64-Linux,
-AMD64-Linux, Alpha-Linux, ARM-Linux, and PowerPC OS-X.
+================
+Building OpenOCD
+================
 
-4. Documentation
+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.
 
-Documentation for the OpenOCD is hosted in the Berlios OpenFacts Wiki at
-http://openfacts.berlios.de/index-en.phtml?title=Open_On-Chip_Debugger.
+The remainder of this document tries to provide some instructions for
+those looking for a quick-install.
 
-There is also and openocd(1) manpage, the 'openocd --help' output and
-an OpenOCD info page (type 'info openocd').
+OpenOCD Dependencies
+--------------------
 
-5. Licensing
+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.
 
-OpenOCD is licensed under the terms of the GNU General Public License, see the
-file COPYING for details.
+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-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-osbdm          Enable building support for the OSBDM (JTAG only)
+                          Programmer
+
+  --enable-opendous       Enable building support for the estick/opendous JTAG
+                          Programmer
+
+  --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.