X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=README;h=3a473c7bcca07d9d2e184855a038f5811b108485;hp=4e790117720aa17f96d758d3929888b357a3aea9;hb=6055d952c3efd2e6b12924c5ec42407fff99b453;hpb=5a15c6d8079ac3e8b0677ae9665e841856a42772 diff --git a/README b/README index 4e79011772..3a473c7bcc 100644 --- a/README +++ b/README @@ -1,132 +1,456 @@ - OpenOCD - - Free and Open On-Chip Debugging, In-System Programming - and Boundary-Scan Testing - Copyright (c) 2004-2007 Dominic Rath - -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. - -User interaction is realized through a telnet command line interface and a gdb -(The GNU Debugger) remote protocol server. - -1. JTAG hardware - -Currently, OpenOCD supports the following JTAG interfaces: - -- 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. - -The list of supported parallel port devices includes: - - * 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 - -- 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. - -- 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: - -* 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. - -* OOCD-Link: http://www.joernonline.de/dw/doku.php?id=en:projects:oocdlink -Similar to the USBJTAG, this design comes with free schematics, too. - -* 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. - -* 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. - -* 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. - -* 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. - -* TinCanTools 'Flyswatter' USB JTAG programmer. - -* 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. - -* Hitex STR9-comSTICK: http://www.ehitex.de/p_info.php?products_id=292 -A STR912FW44x microcontroller "board" with USB and JTAG functionality. - -* Luminary Micro development board evb_lm3s811 JTAG interface. - -* 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. - -* 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. - -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. - -2. Supported cores - -This version of openocd supports the following ARM7/9 cores: - -- ARM7TDMI(-s) -- ARM9TDMI -- ARM920t -- ARM922t -- ARM926ej-s -- ARM966e -- Cortex-M3 - -Support for Intel XScale CPUs is also included: - -- PXA25x -- PXA27x -- IXP42x - -And support for the Marvell Feroceon CPU core as found in the -Orion SOC family is included as well. - -3. Host platforms - -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. - -4. Documentation - -Documentation for the OpenOCD is hosted in the Berlios OpenFacts Wiki at -http://openfacts.berlios.de/index-en.phtml?title=Open_On-Chip_Debugger. - -5. Licensing - -OpenOCD is licensed under the terms of the GNU General Public License, see the -file COPYING for details. - +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-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 + --with-ftd2xx-linux-tardir + Where (Linux/Unix) the tar file from ftdichip.com + was unpacked + --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.