Skip to content
Snippets Groups Projects
README 11 KiB
Newer Older
  • Learn to ignore specific revisions
  • Welcome to OpenOCD!
    ===================
    
    OpenOCD provides on-chip programming and debugging support with a
    
    Paul Fertser's avatar
    Paul Fertser committed
    layered architecture of JTAG interface and TAP support including:
    
    
    Paul Fertser's avatar
    Paul Fertser committed
    - (X)SVF playback to facilitate automated boundary scan and FPGA/CPLD
    
    Paul Fertser's avatar
    Paul Fertser committed
      programming;
    - debug target support (e.g. ARM, MIPS): single-stepping,
    
      breakpoints/watchpoints, gprof profiling, etc;
    
    Paul Fertser's avatar
    Paul Fertser committed
    - flash chip drivers (e.g. CFI, NAND, internal flash);
    
    - embedded TCL interpreter for easy scripting.
    
    Paul Fertser's avatar
    Paul Fertser committed
    
    Several network interfaces are available for interacting with OpenOCD:
    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 (and the others who talk GDB protocol, e.g. IDA
    Pro).
    
    
    This README file contains an overview of the following topics:
    
    Paul Fertser's avatar
    Paul Fertser committed
    
    - quickstart instructions,
    
    - how to find and build more OpenOCD documentation,
    
    Paul Fertser's avatar
    Paul Fertser committed
    - list of the supported hardware,
    - the installation and build process,
    
    Paul Fertser's avatar
    Paul Fertser committed
    
    
    ============================
    Quickstart for the impatient
    ============================
    
    If you have a popular board then just start OpenOCD with its config,
    e.g.:
    
      openocd -f board/stm32f4discovery.cfg
    
    If you are connecting a particular adapter with some specific target,
    you need to source both the jtag interface and the target configs,
    e.g.:
    
    
      openocd -f interface/ftdi/jtagkey2.cfg -c "transport select jtag" \
              -f target/ti_calypso.cfg
    
      openocd -f interface/stlink-v2-1.cfg -c "transport select hla_swd" \
              -f target/stm32l0.cfg
    
    Paul Fertser's avatar
    Paul Fertser committed
    
    After OpenOCD startup, connect GDB with
    
      (gdb) target extended-remote localhost:3333
    
    
    
    =====================
    OpenOCD Documentation
    =====================
    
    
    Paul Fertser's avatar
    Paul Fertser committed
    In addition to the in-tree documentation, the latest manuals may be
    viewed online at the following URLs:
    
    Paul Fertser's avatar
    Paul Fertser committed
      OpenOCD User's Guide:
    
        http://openocd.org/doc/html/index.html
    
    Paul Fertser's avatar
    Paul Fertser committed
      OpenOCD Developer's Manual:
    
        http://openocd.org/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
    ----------------------------------
    
    
    Paul Fertser's avatar
    Paul Fertser committed
    By default the OpenOCD build process prepares documentation in the
    "Info format" and installs it the standard way, so that "info openocd"
    can access it.
    
    Additionally, the OpenOCD User's Guide can be produced in the
    following different formats:
    
    
      # 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
    
    Paul Fertser's avatar
    Paul Fertser committed
      make doxygen && ${HTMLVIEWER} doxygen/index.html
    
    
    ==================
    Supported hardware
    ==================
    
    JTAG adapters
    -------------
    
    Paul Fertser's avatar
    Paul Fertser committed
    AICE, ARM-JTAG-EW, ARM-USB-OCD, ARM-USB-TINY, AT91RM9200, axm0432,
    
    BCM2835, Bus Blaster, Buspirate, Chameleon, CMSIS-DAP, Cortino, DENX,
    
    Digilent JTAG-SMT2, DLC 5, DLP-USB1232H, embedded projects, eStick,
    FlashLINK, FlossJTAG, Flyswatter, Flyswatter2, Gateworks, Hoegl, ICDI,
    ICEBear, J-Link, JTAG VPI, JTAGkey, JTAGkey2, JTAG-lock-pick, KT-Link,
    Lisa/L, LPC1768-Stick, MiniModule, NGX, NXHX, OOCDLink, Opendous,
    OpenJTAG, Openmoko, OpenRD, OSBDM, Presto, Redbee, RLink, SheevaPlug
    devkit, Stellaris evkits, ST-LINK (SWO tracing supported),
    
    Paul Fertser's avatar
    Paul Fertser committed
    STM32-PerformanceStick, STR9-comStick, sysfsgpio, TUMPA, Turtelizer,
    ULINK, USB-A9260, USB-Blaster, USB-JTAG, USBprog, VPACLink, VSLLink,
    Wiggler, XDS100v2, Xverve.
    
    Debug targets
    -------------
    
    
    ARM11, ARM7, ARM9, AVR32, Cortex-A, Cortex-R, Cortex-M, LS102x-SAP,
    
    Paul Fertser's avatar
    Paul Fertser committed
    Feroceon/Dragonite, DSP563xx, DSP5680xx, FA526, MIPS EJTAG, NDS32,
    
    XScale, Intel Quark.
    
    Paul Fertser's avatar
    Paul Fertser committed
    
    Flash drivers
    -------------
    
    
    ADUC702x, AT91SAM, ATH79, AVR, CFI, DSP5680xx, EFM32, EM357, FM3, FM4, Kinetis,
    
    LPC8xx/LPC1xxx/LPC2xxx/LPC541xx, LPC2900, LPCSPIFI, Marvell QSPI,
    
    Milandr, NIIET, NuMicro, PIC32mx, PSoC4, SiM3x, Stellaris, STM32, STMSMI,
    
    STR7x, STR9x, nRF51; NAND controllers of AT91SAM9, LPC3180, LPC32xx,
    
    i.MX31, MXC, NUC910, Orion/Kirkwood, S3C24xx, S3C6400, XMC1xxx, XMC4xxx.
    
    
    
    ==================
    Installing OpenOCD
    ==================
    
    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.
    
    Paul Fertser's avatar
    Paul Fertser committed
    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:
    
    
    Paul Fertser's avatar
    Paul Fertser committed
    - Sell dongles and include pre-built binaries;
    - Supply tools or IDEs (a development solution integrating OpenOCD);
    - Build packages (e.g. RPM or DEB files for a GNU/Linux distribution).
    
    
    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:
    
    
    Paul Fertser's avatar
    Paul Fertser committed
    - Send patches, including config files, upstream, participate in the
      discussions;
    - Enable all the options OpenOCD supports, even those unrelated to your
      particular hardware;
    - Use "ftdi" interface adapter driver for the FTDI-based devices.
    
    
    
    ================
    Building OpenOCD
    ================
    
    The INSTALL file contains generic instructions for running 'configure'
    
    Paul Fertser's avatar
    Paul Fertser committed
    and compiling the OpenOCD source code. That file is provided by
    default for all GNU autotools 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
    --------------------
    
    
    Paul Fertser's avatar
    Paul Fertser committed
    GCC or Clang is currently 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.
    
    Paul Fertser's avatar
    Paul Fertser committed
    You'll also need:
    
    Paul Fertser's avatar
    Paul Fertser committed
    - make
    - libtool
    
    - pkg-config >= 0.23 (or compatible)
    
    Paul Fertser's avatar
    Paul Fertser committed
    Additionally, for building from git:
    
    Paul Fertser's avatar
    Paul Fertser committed
    - autoconf >= 2.64
    
    - automake >= 1.14
    
    Paul Fertser's avatar
    Paul Fertser committed
    - texinfo
    
    Paul Fertser's avatar
    Paul Fertser committed
    USB-based adapters depend on libusb-1.0 and some older drivers require
    
    libusb-0.1 or libusb-compat-0.1. A compatible implementation, such as
    FreeBSD's, additionally needs the corresponding .pc files.
    
    USB-Blaster, ASIX Presto and OpenJTAG interface adapter
    
    Paul Fertser's avatar
    Paul Fertser committed
      - libftdi: http://www.intra2net.com/en/developer/libftdi/index.php
    
    CMSIS-DAP support needs HIDAPI library.
    
    
    Paul Fertser's avatar
    Paul Fertser committed
    Permissions delegation
    ----------------------
    
    Paul Fertser's avatar
    Paul Fertser committed
    Running OpenOCD with root/administrative permissions is strongly
    discouraged for security reasons.
    
    For USB devices on GNU/Linux you should use the contrib/60-openocd.rules
    
    file. It probably belongs somewhere in /etc/udev/rules.d, but
    
    Paul Fertser's avatar
    Paul Fertser committed
    consult your operating system documentation to be sure. Do not forget
    to add yourself to the "plugdev" group.
    
    Paul Fertser's avatar
    Paul Fertser committed
    For parallel port adapters on GNU/Linux and FreeBSD please change your
    "ppdev" (parport* or ppi*) device node permissions accordingly.
    
    Paul Fertser's avatar
    Paul Fertser committed
    For parport adapters on Windows you need to run install_giveio.bat
    (it's also possible to use "ioperm" with Cygwin instead) to give
    ordinary users permissions for accessing the "LPT" registers directly.
    
    Paul Fertser's avatar
    Paul Fertser committed
    Compiling OpenOCD
    -----------------
    
    Paul Fertser's avatar
    Paul Fertser committed
    To build OpenOCD, use the following sequence of commands:
    
    Paul Fertser's avatar
    Paul Fertser committed
      ./bootstrap (when building from the git repository)
      ./configure [options]
      make
      sudo make install
    
    Paul Fertser's avatar
    Paul Fertser committed
    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.
    
    Paul Fertser's avatar
    Paul Fertser committed
    To see the list of all the supported options, run
      ./configure --help
    
    Paul Fertser's avatar
    Paul Fertser committed
    Cross-compiling Options
    -----------------------
    
    Paul Fertser's avatar
    Paul Fertser committed
    Cross-compiling is supported the standard autotools way, you just need
    to specify the cross-compiling target triplet in the --host option,
    e.g. for cross-building for Windows 32-bit with MinGW on Debian:
    
    Paul Fertser's avatar
    Paul Fertser committed
      ./configure --host=i686-w64-mingw32 [options]
    
    To make pkg-config work nicely for cross-compiling, you might need an
    additional wrapper script as described at
    
      http://www.flameeyes.eu/autotools-mythbuster/pkgconfig/cross-compiling.html
    
    This is needed to tell pkg-config where to look for the target
    libraries that OpenOCD depends on. Alternatively, you can specify
    *_CFLAGS and *_LIBS environment variables directly, see "./configure
    --help" for the details.
    
    
    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
    
    Paul Fertser's avatar
    Paul Fertser committed
    the later option is an option to the parport driver.
    
    Paul Fertser's avatar
    Paul Fertser committed
    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
    
    Paul Fertser's avatar
    Paul Fertser committed
    
    
    ==========================
    Obtaining OpenOCD From GIT
    ==========================
    
    You can download the current GIT version with a GIT client of your
    choice from the main repository:
    
       git://git.code.sf.net/p/openocd/code
    
    David Brownell's avatar
    David Brownell committed
    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://git.code.sf.net/p/openocd/code openocd
    
    Then you can update that at your convenience using
    
    There is also a gitweb interface, which you can use either to browse
    
    Uwe Hermann's avatar
    Uwe Hermann committed
    the repository or to download arbitrary snapshots using HTTP:
    
    David Brownell's avatar
    David Brownell committed
       http://repo.or.cz/w/openocd.git
    
    
    Snapshots are compressed tarballs of the source tree, about 1.3 MBytes
    each at this writing.