
Miroir officiel en lecture seule d'OpenOCD (pas de pull requests)
OpenOCD fournit une prise en charge de la programmation et du débogage sur puce avec une architecture en couches de l'interface JTAG et du support TAP, notamment :
Plusieurs interfaces réseau sont disponibles pour interagir avec OpenOCD : telnet, Tcl et GDB. Le serveur GDB permet à OpenOCD de fonctionner comme une 'cible distante' pour le débogage au niveau source des systèmes embarqués en utilisant le programme GNU GDB (et les autres qui parlent le protocole GDB, par ex. IDA Pro).
Ce fichier README contient un aperçu des sujets suivants :
Si vous avez une carte populaire, lancez simplement OpenOCD avec sa configuration, par ex. :
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.cfg -c "transport select swd" \
-f target/stm32l0.cfg
Après le démarrage d'OpenOCD, connectez GDB avec
(gdb) target extended-remote localhost:3333
La façon la plus simple d'installer OpenOCD est via le gestionnaire de paquets de votre système d'exploitation.
Debian / Ubuntu
sudo apt install openocd
Fedora
sudo dnf install openocd
macOS (via Homebrew)
brew install open-ocd
Windows (via MSYS2)
pacman -S mingw-w64-x86_64-openocd
Ces paquets sont souvent plus stables que la version de développement Git, où le développement actif se produit. "Les empaqueteurs" créent des versions binaires d'OpenOCD après que les développeurs publient de nouvelles versions du code source. Les anciennes versions d'OpenOCD ne sont pas adaptées pour diagnostiquer les problèmes de la version actuelle. Les utilisateurs doivent rester en contact avec les responsables de leur distribution ou les fournisseurs d'interface pour s'assurer que les mises à jour appropriées sont fournies régulièrement.
Si vous utilisez l'un de ces paquets binaires, vous devez contacter l'empaqueteur pour obtenir du support ou des versions binaires plus récentes. Les développeurs d'OpenOCD ne fournissent pas de support direct pour les binaires empaquetés.
Vous êtes un EMPAQUETEUR d'OpenOCD si vous :
En tant qu'EMPAQUETEUR, vous serez le premier à recevoir des rapports de la plupart des problèmes. Lorsque vous résolvez ces problèmes pour vos utilisateurs, votre solution peut aider à éviter des centaines (voire des milliers) d'autres questions de la part d'autres utilisateurs.
Si quelque chose ne fonctionne pas pour vous, veuillez informer les développeurs d'OpenOCD de la manière d'améliorer le système ou la documentation pour éviter de futurs problèmes, et assurez un suivi pour nous aider à garantir que le problème sera entièrement résolu dans nos prochaines versions.
Cela dit, les développeurs d'OpenOCD aimeraient également que vous suiviez quelques suggestions :
En plus de la documentation dans l'arborescence, les derniers manuels peuvent être consultés en ligne aux URL suivantes :
OpenOCD User's Guide: http://openocd.org/doc/html/index.html
OpenOCD Developer's Manual: http://openocd.org/doc/doxygen/html/index.html
Ceux-ci reflètent les dernières versions de développement, donc la section suivante présente comment construire la documentation complète à partir du paquet.
Pour plus d'informations, référez-vous à ces documents ou contactez les développeurs en vous abonnant à la liste de diffusion des développeurs OpenOCD : [email protected]
Par défaut, le processus de compilation d'OpenOCD prépare la documentation au format 'Info' et l'installe de manière standard, de sorte que info openocd puisse y accéder.
De plus, le guide de l'utilisateur d'OpenOCD peut être produit dans les formats différents suivants :
Si PDFVIEWER est défini, cela crée et affiche le guide utilisateur PDF.
make pdf && ${PDFVIEWER} doc/openocd.pdf
Si HTMLVIEWER est défini, cela crée et affiche le guide utilisateur HTML.
make html && ${HTMLVIEWER} doc/openocd.html/index.html
Le manuel du développeur OpenOCD contient des informations sur l'architecture interne et d'autres détails sur le code :
Remarque : assurez-vous que doxygen est installé, tapez 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.
Le fichier INSTALL contient des instructions génériques pour exécuter configure et compiler le code source d'OpenOCD. Ce fichier est fourni par défaut pour tous les paquets GNU autotools. Si vous n'êtes pas familier avec les GNU autotools, vous devriez d'abord lire ces instructions.
Remarque : si le fichier INSTALL n'est pas présent, cela signifie que vous utilisez le code source d'une branche de développement, pas d'une version d'OpenOCD. Dans ce cas, suivez les instructions 'Compilation d'OpenOCD' ci-dessous et le fichier sera créé par la première commande ./bootstrap.
Le reste de ce document tente de fournir quelques instructions pour ceux qui recherchent une installation rapide.
GCC ou Clang est actuellement nécessaire pour compiler OpenOCD. Les développeurs ont commencé à imposer des avertissements stricts sur le code (-Wall, -Werror, -Wextra, etc.) et à utiliser des fonctionnalités spécifiques à C99 : fonctions inline, initialisateurs nommés, mélange de déclarations et de code, et autres astuces. Bien qu'il soit possible d'utiliser d'autres compilateurs, ils doivent être relativement modernes et pourraient nécessiter une extension de support pour supprimer conditionnellement les extensions spécifiques à GCC.
Vous aurez également besoin de :
De plus, pour la compilation à partir de Git :
Les pilotes d'adaptateur USB optionnels nécessitent libusb-1.0.
Les pilotes d'adaptateur d'interface USB-Blaster, ASIX Presto et OpenJTAG optionnels nécessitent la bibliothèque libftdi.
Le pilote d'adaptateur CMSIS-DAP optionnel nécessite la bibliothèque HIDAPI.
Le pilote d'adaptateur linuxgpiod optionnel nécessite la bibliothèque libgpiod.
Le pilote d'adaptateur J-Link optionnel nécessite la bibliothèque libjaylink.
Le désassemblage ARM optionnel nécessite la bibliothèque capstone.
Le script de développement optionnel checkpatch nécessite :
Pour compiler OpenOCD, utilisez la séquence de commandes suivante :
./bootstrap
./configure [options]
make
sudo make install
La commande bootstrap n'est nécessaire que lors de la compilation à partir du dépôt Git.
L'étape configure génère les Makefiles nécessaires pour compiler OpenOCD, généralement avec une ou plusieurs options fournies.
La première étape 'make' compilera OpenOCD et placera l'exécutable final dans './src/'.
La dernière étape (optionnelle), make install, place tous les fichiers à l'emplacement requis.
Pour voir la liste de toutes les options supportées, exécutez ./configure --help
La cross-compilation est supportée de la manière standard d'autotools, il vous suffit de spécifier le triplet de cible de cross-compilation dans l'option --host, par ex. pour la cross-compilation pour Windows 32 bits avec MinGW sur Debian :
./configure --host=i686-w64-mingw32 [options]
Pour que pkg-config fonctionne correctement pour la cross-compilation, vous pourriez avoir besoin d'un script wrapper supplémentaire comme décrit sur https://autotools.io/pkgconfig/cross-compiling.html.
Ceci est nécessaire pour indiquer à pkg-config où chercher les bibliothèques cibles dont OpenOCD dépend. Alternativement, vous pouvez spécifier directement les variables d'environnement *_CFLAGS et *_LIBS, voir ./configure --help pour les détails.
Pour un script plus ou moins complet qui fait tout cela pour vous, voir contrib/cross-build.sh.
Si vous souhaitez accéder au port parallèle en utilisant l'interface PPDEV, vous devez spécifier à la fois --enable-parport et --enable-parport-ppdev, car la dernière option est une option du pilote parport.
La même chose est vraie pour l'option --enable-parport-giveio, vous devez utiliser à la fois l'option --enable-parport et --enable-parport-giveio si vous voulez utiliser giveio au lieu de la méthode d'accès au port parallèle ioperm.
Vous pouvez télécharger la version Git actuelle avec un client Git de votre choix depuis le dépôt principal : git://git.code.sf.net/p/openocd/code
Vous pouvez préférer utiliser un miroir :
En utilisant le client en ligne de commande Git, vous pouvez utiliser la commande suivante pour configurer une copie locale du dépôt actuel (assurez-vous qu'il n'y a pas de répertoire appelé 'openocd' dans le répertoire actuel) :
git clone git://git.code.sf.net/p/openocd/code openocd
Ensuite, vous pouvez le mettre à jour à votre convenance en utilisant git pull.
Il existe également une interface gitweb, que vous pouvez utiliser soit pour parcourir le dépôt, soit pour télécharger des instantanés arbitraires en utilisant HTTP : http://repo.or.cz/w/openocd.git.
Les instantanés sont des archives compressées de l'arborescence source, d'environ 1,3 Mo chacun au moment de la rédaction.
L'exécution d'OpenOCD avec des privilèges root/administrateur est fortement déconseillée pour des raisons de sécurité.
Pour les périphériques USB sur GNU/Linux, vous devez utiliser le fichier contrib/60-openocd.rules. Il appartient probablement quelque part dans /etc/udev/rules.d, mais consultez la documentation de votre système d'exploitation pour en être sûr. N'oubliez pas de vous ajouter au groupe 'plugdev'.
Pour les adaptateurs port parallèle sur GNU/Linux et FreeBSD, veuillez modifier les permissions de votre nœud de périphérique 'ppdev' (parport* ou ppi*) en conséquence.
Pour les adaptateurs parport sur Windows, vous devez exécuter install_giveio.bat (il est également possible d'utiliser 'ioperm' avec Cygwin à la place) pour donner aux utilisateurs ordinaires les permissions d'accéder directement aux registres 'LPT'.