Fedora 39 und Raspberry Pi Pico
Von DG2SMB
Update: Viel einfacher ist es, arm-none-eabi-gdb aus dem Fedora Copr Repository zu installieren. Da muss man sich dann auch nicht mit der Python-Abhängigkeit herumplagen.
Wenn man für den Raspberry Pi Pico mit C/C++ Programme entwickeln möchte, muss man leider ein bisschen anders vorgehen wie z. B. unter Debian/Ubuntu. Hintergrund ist, dass Fedora leider kein RPM-Paket mit gdb-multiarch
bzw. arm-none-eabi-gdb
anbietet. Man kann zwar auf die offizielle ARM Toolchain zurückgreifen, muss hier jedoch beachten, dass die Abhängigkeit zu Python 3.8 erst mal nicht erfüllt ist (Fedora 39 kommt mit Python 3.12). Um auch das zu lösen, installiert man zusätzlich Python 3.8 und setzt die Umgebungsvariablen PYTHONPATH und PYTHONHOME entsprechend. Aber nicht global, sondern nur für Visual Studio Code. Jedenfalls ist das das Setup, das für mich funktioniert und mit dem ich zufrieden bin.
Im folgenden erkläre ich die Vorgehensweise noch etwas genauer.
pico-sdk
Der Teil ist einfach. Zunächst jedoch sollten die Development Tools, cmake und was man zum Entickeln sonst noch so braucht installiert werden:
$ sudo dnf groupinstall "Development tools"
$ sudo dnf install cmake
Visual Studo Code selbst installiert man am besten über das Microsoft-eigene RPM Repository. Wie das genau gemacht wird, wird hier erklärt.
Und dann folgt man einfach der Vorgehensweise in der Pico Dokumentation.
$ mkdir pico && cd pico
$ git clone https://github.com/raspberrypi/pico-sdk
$ cd pico-sdk
$ git submodule update --init
Und dann fügt man die folgende Zeile noch seiner .bashrc
hinzu:
export Pico_SDK_PATH="$HOME/pico/pico-sdk"
arm-none-eabi Toolchain
Nun könnte man einfach die arm-none-eabi-Paket von Fedora installieren. Doch wie oben erwähnt, würde dann der Debugger fehlen. Also lädt man sich die Toolchain (Link siehe oben) herunter. Derzeit ist es das Paket arm-gnu-toolchain-13.2.rel1-aarch64-arm-none-eabi.tar.xz. Am besten plaziert man es im pico-Verzeichnis und legt einen vereinfachenden Symbolischen Link darauf.
$ cd ~/pico
$ wget https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-eabi.tar.xz
$ tar xJf arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-eabi.tar.xz
$ rm arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-eabi.tar.xz
$ ln -s arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi arm-gnu-toolchain
Das bin-Verzeichnis der Toolchain fügt man dann einfach (in der .bashrc) der PATH Umgebungsvariablen hinzu. Bei mir sieht die Zeile so aus:
export PATH="$HOME/pico/arm-gnu-toolchain/bin:$PATH"
Und in Visual Studio Code gibt man das in der launch.json-Datei einfach so an:
[...]
"gdbPath": "arm-none-eabi-gdb",
[...]
Jetzt gilt es nur noch, die Abhängigkeit der Toolchain zu Python 3.8 zu erfüllen. Zunächst installiert man das entsprechende Python-Paket:
$ sudo dnf install python3.8
Zwar könnte man einfach global PYTHONPATH und PYTHONHOME passend für Python 3.8 einfach global setzen (bashrc), doch das wollte ich nicht haben, weil es dann eben generell gilt – auf dem System jedoch eigentlich Python 3.12 zum Einsatz kommen soll. Das beißt sich. Ich habe mir dann einfach ein Shellscript gebaut, das ich immer dann aufrufe, wenn ich mit Visual Studio Code für den Raspberry Pi Pico entwickeln möchte.
In der (ausführbar gemachten) Datei ~/bin/mycode.sh steht also:
#!/bin/env bash
PYTHONPATH=/usr/lib64/python3.8 PYTHONHOME=/usr/bin/python.3.8 code $1
Fertig. Dem Entwickeln und vor allem dem Debuggen für den Raspberry Pi Pico, etwa über die Raspberry Pi Debug Probe, steht nun nichts mehr im Wege.