
Espejo oficial de solo lectura de OpenOCD (sin pull requests)
OpenOCD proporciona soporte de programación y depuración en chip con una arquitectura en capas de interfaz JTAG y soporte TAP que incluye:
Varias interfaces de red están disponibles para interactuar con OpenOCD: telnet, Tcl y GDB. El servidor GDB permite que OpenOCD funcione como un 'objetivo remoto' para la depuración a nivel de fuente de sistemas embebidos usando el programa GNU GDB (y otros que hablan el protocolo GDB, p.ej. IDA Pro).
Este archivo README contiene una visión general de los siguientes temas:
Si tienes una placa popular, simplemente inicia OpenOCD con su configuración, p.ej.:
openocd -f board/stm32f4discovery.cfg
Si estás conectando un adaptador particular con un objetivo específico, necesitas cargar tanto la interfaz JTAG como las configuraciones del objetivo, p.ej.:
openocd -f interface/ftdi/jtagkey2.cfg -c "transport select jtag" \
-f target/ti/calypso.cfg
openocd -f interface/stlink.cfg -c "transport select swd" \
-f target/stm32l0.cfg
Después del inicio de OpenOCD, conecta GDB con
(gdb) target extended-remote localhost:3333
La forma más fácil de instalar OpenOCD es a través del gestor de paquetes de tu sistema operativo.
Debian / Ubuntu
sudo apt install openocd
Fedora
sudo dnf install openocd
macOS (vía Homebrew)
brew install open-ocd
Windows (vía MSYS2)
pacman -S mingw-w64-x86_64-openocd
Estos paquetes suelen ser más estables que la rama principal Git de última generación, donde ocurre el desarrollo activo. Los 'empaquetadores' crean versiones binarias de OpenOCD después de que los desarrolladores publiquen nuevas versiones del código fuente. Las versiones antiguas de OpenOCD no son adecuadas para diagnosticar problemas en la versión actual. Los usuarios deben mantenerse en contacto con los mantenedores de su distribución o los vendedores de interfaces para asegurarse de que se proporcionen actualizaciones apropiadas regularmente.
Si usas uno de estos paquetes binarios, debes contactar al empaquetador para obtener soporte o versiones binarias más nuevas. Los desarrolladores de OpenOCD no proporcionan soporte directo para binarios empaquetados.
Eres un EMPAQUETADOR de OpenOCD si:
Como empaquetador, experimentarás los primeros informes de la mayoría de los problemas. Cuando arregles esos problemas para tus usuarios, tu solución puede ayudar a prevenir cientos (si no miles) de otras preguntas de otros usuarios.
Si algo no funciona para ti, por favor trabaja para informar a los desarrolladores de OpenOCD cómo mejorar el sistema o la documentación para evitar problemas futuros, y da seguimiento para ayudarnos a asegurar que el problema se resuelva completamente en nuestras futuras versiones.
Dicho esto, los desarrolladores de OpenOCD también te piden que sigas algunas sugerencias:
Además de la documentación en el árbol, los manuales más recientes pueden verse en línea en las siguientes URLs:
Guía de usuario de OpenOCD: http://openocd.org/doc/html/index.html
Manual del desarrollador de OpenOCD: http://openocd.org/doc/doxygen/html/index.html
Estos reflejan las últimas versiones de desarrollo, por lo que la siguiente sección presenta cómo construir la documentación completa desde el paquete.
Para más información, consulta estos documentos o contacta a los desarrolladores suscribiéndote a la lista de correo de desarrolladores de OpenOCD: [email protected]
Por defecto, el proceso de compilación de OpenOCD prepara la documentación en 'formato Info' y la instala de manera estándar, para que info openocd pueda acceder a ella.
Además, la Guía de usuario de OpenOCD puede producirse en los siguientes formatos diferentes:
Si PDFVIEWER está configurado, esto crea y visualiza la Guía de usuario en PDF.
make pdf && ${PDFVIEWER} doc/openocd.pdf
Si HTMLVIEWER está configurado, esto crea y visualiza la Guía de usuario en HTML.
make html && ${HTMLVIEWER} doc/openocd.html/index.html
El Manual del desarrollador de OpenOCD contiene información sobre la arquitectura interna y otros detalles sobre el código:
Nota: asegúrate de que doxygen esté instalado, escribe doxygen --version
make doxygen && ${HTMLVIEWER} doxygen/index.html
AM335x, ARM-JTAG-EW, ARM-USB-OCD, ARM-USB-TINY, AT91RM9200, axm0432, BCM2835, Bus Blaster, Buspirate, Cadence DPI, Cadence vdebug, Chameleon, CMSIS-DAP, Cortino, Cypress KitProg, DENX, Digilent JTAG-SMT2, DLC 5, DLP-USB1232H, embedded projects, Espressif USB JTAG Programmer, eStick, FlashLINK, FlossJTAG, Flyswatter, Flyswatter2, FTDI FT232R, Gateworks, Hoegl, ICDI, ICEBear, J-Link, JTAG VPI, JTAGkey, JTAGkey2, JTAG-lock-pick, KT-Link, Linux GPIOD, Lisa/L, LPC1768-Stick, Mellanox rshim, MiniModule, NGX, Nuvoton Nu-Link, Nu-Link2, NXHX, NXP IMX GPIO, OOCDLink, Opendous, OpenJTAG, Openmoko, OpenRD, OSBDM, Presto, Redbee, Remote Bitbang, RLink, SheevaPlug devkit, Stellaris evkits, ST-LINK (SWO tracing supported), STM32-PerformanceStick, STR9-comStick, sysfsgpio, Tigard, TI XDS110, TUMPA, Turtelizer, ULINK, USB-A9260, USB-Blaster, USB-JTAG, USBprog, VPACLink, VSLLink, Wiggler, XDS100v2, Xilinx XVC/PCIe, Xverve.
ARM: AArch64, ARM11, ARM7, ARM9, Cortex-A/R (v7-A/R), Cortex-M (ARMv{6/7/8}-M), FA526, Feroceon/Dragonite, XScale. ARCv2, AVR32, DSP563xx, DSP5680xx, EnSilica eSi-RISC, EJTAG (MIPS32, MIPS64), ESP32, ESP32-S2, ESP32-S3, Intel Quark, LS102x-SAP, RISC-V, ST STM8, Xtensa.
ADUC702x, AT91SAM, AT91SAM9 (NAND), ATH79, ATmega128RFA1, Atmel SAM, AVR, CFI, DSP5680xx, EFM32, EM357, eSi-RISC, eSi-TSMC, EZR32HG, FM3, FM4, Freedom E SPI, GD32, i.MX31, Kinetis, LPC8xx/LPC1xxx/LPC2xxx/LPC541xx, LPC2900, LPC3180, LPC32xx, LPCSPIFI, Marvell QSPI, MAX32, Milandr, MXC, NIIET, nRF51, nRF52 , NuMicro, NUC910, Nuvoton NPCX, onsemi RSL10, Orion/Kirkwood, PIC32mx, PSoC4/5LP/6, Raspberry RP2040, Renesas RPC HF and SH QSPI, S3C24xx, S3C6400, SiM3x, SiFive Freedom E, Stellaris, ST BlueNRG, STM32, STM32 QUAD/OCTO-SPI for Flash/FRAM/EEPROM, STMSMI, STR7x, STR9x, SWM050, TI CC13xx, TI CC26xx, TI CC32xx, TI MSP432, Winner Micro w600, Xilinx XCF, XMC1xxx, XMC4xxx.
El archivo INSTALL contiene instrucciones genéricas para ejecutar configure y compilar el código fuente de OpenOCD. Ese archivo se proporciona por defecto para todos los paquetes GNU autotools. Si no estás familiarizado con GNU autotools, entonces deberías leer esas instrucciones primero.
Nota: si el archivo INSTALL no está presente, significa que estás usando el código fuente de una rama de desarrollo, no de una versión de OpenOCD.
En este caso, sigue las instrucciones 'Compilando OpenOCD' a continuación y el archivo será creado por el primer comando ./bootstrap.
El resto de este documento intenta proporcionar algunas instrucciones para aquellos que buscan una instalación rápida.
Actualmente se requiere GCC o Clang para compilar OpenOCD. Los desarrolladores han comenzado a aplicar advertencias de código estrictas (-Wall, -Werror, -Wextra, y más) y a usar características específicas de C99: funciones inline, inicializadores nombrados, mezcla de declaraciones con código, y otros trucos. Si bien es posible usar otros compiladores, deben ser algo modernos y podrían requerir extender el soporte para eliminar condicionalmente las extensiones específicas de GCC.
También necesitarás:
Adicionalmente, para compilar desde Git:
Los controladores de adaptadores basados en USB opcionales necesitan libusb-1.0.
Los controladores opcionales de adaptadores de interfaz USB-Blaster, ASIX Presto y OpenJTAG necesitan la librería libftdi.
El controlador opcional de adaptador CMSIS-DAP necesita la librería HIDAPI.
El controlador opcional de adaptador linuxgpiod necesita la librería libgpiod.
El controlador opcional de adaptador J-Link necesita la librería libjaylink.
El desensamblador ARM opcional necesita la librería capstone.
El script de desarrollo opcional checkpatch necesita:
Para compilar OpenOCD, usa la siguiente secuencia de comandos:
./bootstrap
./configure [options]
make
sudo make install
El comando bootstrap solo es necesario cuando se compila desde el repositorio Git.
El paso configure genera los Makefiles necesarios para compilar OpenOCD, usualmente con una o más opciones proporcionadas.
El primer paso 'make' compilará OpenOCD y colocará el ejecutable final en './src/'.
El último paso (opcional), make install, coloca todos los archivos en la ubicación requerida.
Para ver la lista de todas las opciones compatibles, ejecuta ./configure --help
La compilación cruzada se admite de la manera estándar de autotools, solo necesitas especificar el triplete de destino de compilación cruzada en la opción --host, p.ej. para compilación cruzada para Windows de 32 bits con MinGW en Debian:
./configure --host=i686-w64-mingw32 [options]
Para que pkg-config funcione bien para la compilación cruzada, es posible que necesites un script envolvente adicional como se describe en https://autotools.io/pkgconfig/cross-compiling.html.
Esto es necesario para indicar a pkg-config dónde buscar las librerías de destino de las que depende OpenOCD. Alternativamente, puedes especificar las variables de entorno *_CFLAGS y *_LIBS directamente, consulta ./configure --help para más detalles.
Para un script más o menos completo que haga todo esto por ti, consulta contrib/cross-build.sh.
Si deseas acceder al puerto paralelo usando la interfaz PPDEV, debes especificar tanto --enable-parport como --enable-parport-ppdev, ya que la última opción es una opción para el controlador parport.
Lo mismo es cierto para la opción --enable-parport-giveio, debes usar tanto la opción --enable-parport como la opción --enable-parport-giveio si deseas usar giveio en lugar del método de acceso al puerto paralelo ioperm.
Puedes descargar la versión actual de Git con un cliente Git de tu elección desde el repositorio principal: git://git.code.sf.net/p/openocd/code
Puede que prefieras usar un espejo:
Usando el cliente de línea de comandos Git, podrías usar el siguiente comando para configurar una copia local del repositorio actual (asegúrate de que no haya un directorio llamado "openocd" en el directorio actual):
git clone git://git.code.sf.net/p/openocd/code openocd
Luego puedes actualizarlo a tu conveniencia usando git pull.
También hay una interfaz gitweb, que puedes usar para navegar por el repositorio o descargar instantáneas arbitrarias usando HTTP: http://repo.or.cz/w/openocd.git.
Las instantáneas son tarballs comprimidos del árbol de código fuente, de aproximadamente 1.3 MBytes cada una al momento de escribir esto.
Ejecutar OpenOCD con permisos de root/administrador está fuertemente desaconsejado por razones de seguridad.
Para dispositivos USB en GNU/Linux, debes usar el archivo contrib/60-openocd.rules. Probablemente pertenezca a /etc/udev/rules.d, pero consulta la documentación de tu sistema operativo para estar seguro. No olvides agregarte al grupo 'plugdev'.
Para adaptadores de puerto paralelo en GNU/Linux y FreeBSD, cambia los permisos del nodo de dispositivo 'ppdev' (parport* o ppi*) en consecuencia.
Para adaptadores parport en Windows, necesitas ejecutar install_giveio.bat (también es posible usar 'ioperm' con Cygwin en su lugar) para dar permisos a los usuarios comunes para acceder a los registros 'LPT' directamente.