Einführung
In der Vergangenheit, BauenOpenOCDunter Windows war aufgrund der zahlreichen Abhängigkeiten und der mangelnden Verfügbarkeit auf der Windows-Plattform ein komplizierter Prozess. Glücklicherweise ist die Erstellung von OpenOCD mit MSYS2 zu einer einfachen Aufgabe geworden. Für diejenigen, die die neueste stabile Version von OpenOCD auf MSYS2 benötigen, ist diese als Binärdatei verfügbar und kann mit einem einzigen Befehl installiert werden.
Es kann jedoch Fälle geben, in denen Sie die Entwicklungsversion von OpenOCD erstellen oder einige Patches aus dem OpenOCD-Gerrit-Repository anwenden müssen. BenutzenMSYS2UndPKGBUILDAus dem Upstream-Repository können diese Vorgänge nun ganz einfach durchgeführt werden. In diesem Artikel führen wir Sie durch die erforderlichen Schritte zum Erstellen von OpenOCD unter Windows mit MSYS2.
Beachten Sie, dass mein Hauptziel beim ersten Schreiben dieses Artikels darin bestand, ein einfaches Rezept zum Erstellen von OpenOCD unter Windows und zum Erstellen einer eigenständigen Version bereitzustellen, die für ChibiStudio geeignet ist. Allerdings hat sich der Zweck des Artikels seitdem erweitert, um ein breiteres Publikum anzusprechen. Egal, ob Sie OpenOCD in MSYS2 aus der Binärdatei installieren, OpenOCD in MSYS2 aus dem Entwicklungs-Repository kompilieren und installieren oder OpenOCD als eigenständige Anwendung exportieren möchten, dieser Artikel deckt alles ab.
Über MSYS2
Was ist MSYS2
MSYS2, kurz für Minimal SYStem 2, ist eine schlanke Anwendung, die auf Cygwin und MinGW-w64 basiert und für die Ausführung unter Windows entwickelt wurde. Mit MSYS2 können Sie Autotools und Revisionskontrollsysteme verwenden und native Windows-Anwendungen mithilfe der MINGW-w64-Toolchains erstellen. Die Installation von Paketen wird vereinfacht, da die Entwickler Pacman von Arch Linux portiert haben. Dies bringt leistungsstarke Funktionen wie die Auflösung von Abhängigkeiten und einfache vollständige System-Upgrades mit sich. Beim Start erscheint MSYS2 als Basisterminal.
MSYS2 besteht aus drei Subsystemen und jedes verfügt über ein entsprechendes Paket-Repository. Dies sind msys2, mingw32 und mingw64.
- DermingwSubsysteme stehen im Mittelpunkt des Projekts und stellen native Windows-Programme bereit. Diese Programme sind so konzipiert, dass sie unabhängig von den anderen Subsystemen gut mit anderen Windows-Programmen zusammenarbeiten.
- Dermsys2Das Subsystem bietet eine emulierte, größtenteils POSIX-kompatible Umgebung zum Erstellen von Software, Paketverwaltung und Shell-Scripting. Diese Programme existieren in einem virtuellen Single-Root-Dateisystem, wobei das Root das MSYS2-Installationsverzeichnis ist. Obwohl die Programme so konzipiert sind, dass sie gut mit nativen Windows-Programmen funktionieren, kann es einige Einschränkungen geben.
Einrichtung von MSYS2
Sie können MSYS2 als ausführbare Datei herunterladen vonSourceForge. Der Installationsprozess ist unkompliziert und erstellt einen Ordner, normalerweise unter C:, mit dem Namen msys64 (oder msys32 für 32-Bit-Systeme). Sobald Sie die Installation abgeschlossen haben, können Sie die Shell über eine der drei im Installationsordner verfügbaren .exe-Dateien starten, die jeweils einem der drei MSYSTEM-Subsysteme zugeordnet sind.
Der allgemeine Vorschlag besteht darin, mingw32 anstelle von mingw64 zu verwenden, um ein Programm zu haben, das mit den alten 32-Bit-Systemen kompatibel ist. Sie können Ihr aktuelles MSYSTEM überprüfen, indem Sie den folgenden Befehl ausführen:
echo $MSYSTEM
Um Probleme im Zusammenhang mit niedrigen Berechtigungsstufen zu vermeiden, empfiehlt es sich, MSYS2 als Administrator zu starten. Beachten Sie außerdem, dass die klassischen Hotkeys zum Kopieren und Einfügen möglicherweise nicht wie erwartet funktionieren. Stattdessen können Sie zum Einfügen mit der rechten Maustaste auf das Terminal klicken oder STRG+Einfg und Umschalt+Einf anstelle von STRG+C und STRG+V verwenden.
OpenOCD erhalten
Es gibt zwei Möglichkeiten, OpenOCD mit MSYS2 zu erhalten:
- Wir können die vorgefertigte Version von OpenOCD installieren, die mit MSYS2 geliefert wird, und sie dann extrahieren.
- Wir können OpenOCD erstellen, indem wir die erforderlichen Tools installieren und die neueste Version aus dem Git-Repository herunterladen.
Beide Optionen sind wertvoll. Die erste ist einfacher und stellt uns die neueste stabile Version von OpenOCD zur Verfügung, die von den Entwicklern erstellt wurde. Es kann jedoch vorkommen, dass wir die neueste Entwicklungsversion benötigen, die möglicherweise neue Mikrocontroller unterstützt oder für uns wichtige Fehlerbehebungen enthält.
Installieren Sie die vorgefertigte Version von OpenOCD
MSYS2 wird mit einer vorgefertigten Version von OpenOCD geliefert, die installiert werden kann, um es direkt über die Befehlszeile auszuführen. Während dies möglicherweise nicht nützlich ist, wenn Ihr ultimatives Ziel darin besteht, OpenOCD aus dem Repository zu erstellen, ist es erwähnenswert, wenn Sie OpenOCD über die MSYS2-Befehlszeile verwenden möchten.
Nach der Installation ist das Erstellen einer eigenständigen Version von OpenOCD durch Extrahieren von OpenOCD und seinen Abhängigkeiten aus dem Ordner C:\msys64\mingw32 (oder C:\msys64\mingw64 für die 64-Bit-Version) einfach und für die meisten Szenarien geeignet. Um die 32-Bit-Version zu installieren, können Sie den folgenden Befehl verwenden:
pacman -S mingw-w64-i686-openocd-git
Um die 64-Bit-Version zu installieren, können Sie den folgenden Befehl verwenden:
pacman -S mingw-w64-x86_64-openocd-git
Sobald die Einrichtung abgeschlossen ist, können Sie OpenOCD in MSYS2 als nativen Befehl verwenden. Um beispielsweise OpenOCD für einen STM32 Nucleo-64 F401 zu starten, können Sie den folgenden Befehl verwenden:
openocd -f "board/st_nucleo_f4.cfg"
Erstellen von OpenOCD aus dem Repository
Um Pakete zu kompilieren, müssen wir MSYS2 aktualisieren und einige Tools installieren und konfigurieren. Auch wenn Sie dies schon einmal getan haben, ist es dennoch eine gute Idee, Ihr System mindestens einmal zu aktualisieren.
Aktualisieren Sie MSYS2
Der folgende Befehl aktualisiert MSYS2. Während es normalerweise beim ersten Versuch funktioniert, können größere Änderungen dazu führen, dass es fehlschlägt. Es wird empfohlen, den Befehl auszuführen, das System neu zu starten und den Befehl erneut auszuführen, bis gemeldet wird, dass keine Pakete mehr zum Aktualisieren vorhanden sind. Der Befehl zum Aktualisieren von MSYS2 lautet:
Pacman -Syuu
Installieren und konfigurieren Sie die benötigten Tools
Mit diesem Befehl müssen wir nun das Basisentwicklungspaket installieren
pacman -S Basis-Entwickler
Die MinGW-Toolchain. Wenn wir die 32-Bit-Version installieren möchten, lautet der Befehl:
pacman -S mingw-w64-i686-toolchain
Wenn wir die 64-Bit-Version installieren möchten, lautet der Befehl:
pacman -S mingw-w64-x86_64-toolchain
Dann brauchen wir Idioten
pacman -S git
Beachten Sie dies bei der ersten VerwendungIdioterfordert die Konfiguration unserer Identität. Dazu müssen wir diese Befehle verwenden (natürlich unter Verwendung Ihrer Identität und Ihrer E-Mail):
git config --global user.name „John Doe“git config --global user.email „johndoe@example.com“
Wie von Kristof vorgeschlagen (siehe Kommentare unten), vergrößern die folgenden Befehle den für Git zugewiesenen Speicher und verhindern so Abstürze beim Klonen großer Repositorys:
git config --global pack.windowMemory "100m"git config --global pack.packSizeLimit "100m"git config --global pack.threads "1"
Klonen des Upstream-Paket-Repositorys
Wie bereits erwähnt, verfügt jedes MSYSTEM über ein eigenes Paket-Repository. Um die für OpenOCD und seine Abhängigkeiten benötigten Pakete zu erhalten, müssen wir das MINGW-Pakete-Repository klonen.
Für diesen Artikel verwende ich meinen Home-Ordner (~) als Arbeitsbereich. Der Home-Ordner befindet sich unterC:/msys64/home/[winusername]. Daher werde ich das Repository mit dem Befehl „git clone“ an diesen Ort klonen.
cd ~git clone https://github.com/Alexpux/MINGW-packages.git
Wenn der Befehl „git clone“ erfolgreich ausgeführt wird, wird ein neuer Ordner mit dem Namen „MINGW-packages“ in unserem Home-Ordner erstellt. Dieser Ordner enthält zahlreiche Unterordner, von denen jeder eine PKGBUILD-Datei enthält. PKGBUILD ist eine Reihe von Anweisungen, die erforderlich sind, um ein Tool zu erstellen und gleichzeitig seine Abhängigkeiten aufzulösen.
OpenOCD erstellen
Jetzt können wir OpenOCD aus seinem Repository erstellen. Wenn wir die 32-Bit-Version erstellen möchten, müssen wir sie ausgeben
export MINGW_ARCH=mingw32cd ~/MINGW-packages/mingw-w64-openocd makepkg-mingw -sLf
Ansonsten
export MINGW_ARCH=mingw64cd ~/MINGW-packages/mingw-w64-openocd makepkg-mingw -sLf
Der Vorgang kann je nach Computer einige Zeit in Anspruch nehmen. Sobald der Vorgang abgeschlossen ist, navigieren Sie zumingw-w64-openocd-gitOrdner. Hier finden Sie:
- Ein Ordner namens pkg, der das erstellte Paket enthält
- Ein Ordner namens src, der den Quellcode enthält
- Eine TAR-Datei mit dem erstellten Paket und dem Quellcode, die zur Installation bereit ist
Installieren des frisch erstellten OpenOCD (optional)
Wenn Sie OpenOCD in Ihrem MSYS2-System installieren möchten, um es über die Befehlszeile auszuführen, können Sie den folgenden Befehl verwenden, um OpenOCD aus der soeben erstellten TAR-Datei zu installieren.
pacman -U mingw-w64-*-openocd-*-any.pkg.tar.xz
Ähnlich wie bei der Binärinstallation können Sie OpenOCD in MSYS2 als nativen Befehl verwenden. Der Hauptunterschied besteht darin, dass Sie jetzt die neueste Entwicklungsversion von OpenOCD verwenden.
OpenOCD als Standalone exportieren
Wenn Sie OpenOCD als eigenständiges Tool verwenden möchten, müssen Sie auch dessen Abhängigkeiten erstellen und diese zusammen mit der OpenOCD-Binärdatei in einen separaten Ordner kopieren. Wenn Sie OpenOCD bereits installiert haben, sind die Abhängigkeiten im Ordner C:\msys64\mingw32 (oder C:\msys64\mingw64 für die 64-Bit-Version) verfügbar.
Aufbau der Abhängigkeiten
Die folgenden Befehle werden einzeln ausgeführt und erstellen jede der Abhängigkeiten von OpenOCD. Führen Sie sie jeweils einmal aus und stellen Sie dabei sicher, dass kein Fehler auftritt
cd ~/MINGW-packages/mingw-w64-confusemakepkg-mingw -sLf
cd ~/MINGW-packages/mingw-w64-capstonemakepkg-mingw -sLf
cd ~/MINGW-packages/mingw-w64-hidapi makepkg-mingw -sLf
cd ~/MINGW-packages/mingw-w64-libftdimakepkg-mingw -sLf
cd ~/MINGW-packages/mingw-w64-libjaylink-gitmakepkg-mingw -sLf
cd ~/mingw-packages/mingw-w64-winpthreads-gitmakepkg-mingw -sLf
cd ~/MINGW-packages/mingw-w64-libusbmakepkg-mingw -sLf
cd ~/MINGW-packages/mingw-w64-libusb-compat-gitmakepkg-mingw -sLf
Zusammenstellung unseres Pakets
Da wir nun über alle notwendigen Komponenten verfügen, können wir den eigenständigen Ordner erstellen. Die folgenden Befehle kopieren diese Teile in einen einzigen Ordner und ordnen sie neu an, um eine Struktur zu erhalten, die der vom OpenOCD-Team auf der Freddie Chopin-Website veröffentlichten ähnelt.
Dadurch wird der eigenständige Ordner mit dem Namen erstelltopenocdim Home-VerzeichnisC:\msys64\home\[winusername].
if [ "$MINGW_ARCH" == "mingw32" ]; dann MINGW_PACKAGE_PREFIX="mingw-w64-i686" MINGW_FOLD="mingw32"else MINGW_PACKAGE_PREFIX="mingw-w64-x86_64" MINGW_FOLD="mingw64"ficp -avr ~/mingw-packages/mingw-w64-confuse/pkg/${MINGW_PACKAGE_PREFIX }-confuse/${MINGW_FOLD}/ ~/cp -avr ~/mingw-packages/mingw-w64-capstone/pkg/${MINGW_PACKAGE_PREFIX}-capstone/${MINGW_FOLD}/ ~/cp -avr ~/mingw-packages /mingw-w64-hidapi/pkg/${MINGW_PACKAGE_PREFIX}-hidapi/${MINGW_FOLD}/ ~/cp -avr ~/mingw-packages/mingw-w64-libftdi/pkg/${MINGW_PACKAGE_PREFIX}-libftdi/${MINGW_FOLD }/ ~/cp -avr ~/mingw-packages/mingw-w64-libjaylink-git/pkg/${MINGW_PACKAGE_PREFIX}-libjaylink-git/${MINGW_FOLD}/ ~/cp -avr ~/mingw-packages/mingw- w64-winpthreads-git/pkg/${MINGW_PACKAGE_PREFIX}-libwinpthread-git/${MINGW_FOLD}/ ~/cp -avr ~/mingw-packages/mingw-w64-libusb/pkg/${MINGW_PACKAGE_PREFIX}-libusb/${ MINGW_FOLD}/ ~/cp -avr ~/mingw-packages/mingw-w64-libusb-compat-git/pkg/${MINGW_PACKAGE_PREFIX}-libusb-compat-git/${MINGW_FOLD}/ ~/cp -avr ~/mingw -packages/mingw-w64-openocd/pkg/${MINGW_PACKAGE_PREFIX}-openocd/${MINGW_FOLD}/ ~/mv ~/${MINGW_FOLD} ~/openocdmv ~/openocd/share/openocd/scripts ~/openocd/scriptscp - avr /${MINGW_FOLD}/bin/libgcc_s_dw2-1.dll ~/openocd/bincp -avr /${MINGW_FOLD}/bin/libjaylink-0.dll ~/openocd/binrm -rf ~/openocd/share
Zusätzliche Hinweise zum Patchen
Wenn Sie das Repository patchen möchten, besteht ein guter Ansatz darin, den Ordner /mingw-packages/mingw-w64-openocd-git zu duplizieren und dessen PKGBUILD durch Hinzufügen einiger Git-Befehle zu bearbeiten.
Vor einiger Zeit musste ich beispielsweise zwei Patches hinzufügen, um STM32F746G Discovery zu unterstützen, und so habe ich das PKGBUILD bearbeitet:
pkgver() { mv "${srcdir}/code" "${srcdir}/${_realname}" cd "${srcdir}/${_realname}" printf "r%s.%s" "$(git rev -list --count HEAD)" "$(git rev-parse --short HEAD)" printf "%s.%s.%s" "$(git fetch http://openocd.zylin.com/openocd refs/ changes/54/2754/2)" "$(git fetch http://openocd.zylin.com/openocd refs/changes/55/2755/4)" "$(git checkout FETCH_HEAD)"}
Was ich getan habe, war, ein hinzuzufügenprintf()
in der Funktionpkgver()
enthält zusätzliche Git-Befehle. Vielleicht nicht die sauberste Lösung, aber damals hat es funktioniert.
Schlussfolgerungen
Dieser Artikel dient als nützliche Referenz für die Erstellung von OpenOCD mit MSYS2. Obwohl es mit dem Ziel geschrieben wurde, OpenOCD für ChibiStudio zu erstellen, gelten die hier bereitgestellten Schritte für jedes Projekt, das die Erstellung von OpenOCD unter Windows mit MSYS2 erfordert.
Es ist erwähnenswert, dass diese Schritte zwar getestet und verifiziert wurden, es jedoch Fälle geben kann, in denen sie nicht wie erwartet funktionieren. In solchen Fällen empfehle ich Ihnen, Kontakt aufzunehmen und unten einen Kommentar zu hinterlassen. Ihr Feedback wird für die Aktualisierung und Verbesserung dieser Dokumentation von großem Nutzen sein.