#Michael Reis 26.04.22 #kurze Installationsanleitung um den Raspberry-Pi-Pico mit openocd,und dem arm-none-eabi-gdb auf einem Linuxrechner zu debuggen. #benötigte Hardware: Raspberry-Pi-Pico, # Linuxrechner(die VM der Fachschaft ist auch möglich, könnte aber etwas knapp werden) # USB-Kabel(um den Pi mit dem Rechner zu verbinden) #benötigte Sofware: openocd (Open On-Chip Debugger 0.11.0+dev-00640-ge83eeb44a) o arm-none-eabi-gdb (GNU gdb (GDB) 7.4.50.20111222-cvs) x arm-none-eabi-gcc (gcc version 9.2.1 20191025) o pico-sdk o snavigator (Tk version 8.3-snavigator-99r1) o Pico-debug (pico-debug-gimmecache.uf2 oder pico-debug-maxram.uf2) o pico-examples o cmake o #in der virtuellen maschine muss eventuell erst geupdatet werden und git installier werden $ sudo apt update $ sudo apt upgrade $ sudo apt autoremove $ sudo apt install git-all #erstelle einen ordner in /home/fs/ mit dem namen pico #öffne eine Terminal im ordner /home/fs/pico/ #openocd: Installation der richtigen Version $ sudo apt install automake autoconf build-essential texinfo libtool libhidapi-dev libusb-1.0-0-dev $ git clone git://git.code.sf.net/p/openocd/code openocd $ cd openocd $ ./bootstrap $ ./configure --enable-cmsis-dap $ make -j4 $ sudo make install #mit dem folgenden befehl kann nun die korrekte instalation sowie die version von openocd überprüft werden #Open On-Chip Debugger 0.11.0+dev-00640-ge83eeb44a $ openocd -v #Pico-debug: was und woher #Pico-debug ist ein third-party Programm, welches erlaubt über den USB-anschluss des Pico zu debuggen, da der USB-#Anschluss hierfür genutzt wird, kann er nicht vom Userprogramm genutzt werden, Außerdem darf der User den PLL_USB #nicht rekonfigurieren, das der debugger diesen benötigt. #es stehen zwei versionen zur verfügung: #pico-debug-maxram: das Programm läuft komplett im cache des Flashspeichers, dieser kann somit nicht vom userprogramm #genutzt werden, dafür steht die maximale ram-größe zur verfügung #pico-debug-gimmecache: das Programm liegt im SRAM des Pico auf den Adressen 0x2003C000 bis 0x2003FFFF, dieser #Adressbereich darf somit nicht vom user genutzt werden, dafür steht ihm der komplette cache des Flashspeichers zur #verfügung. #von folgendem git-repo können die Dateien sowie der source-code gezogen werden: https://github.com/majbthrd/pico-debug/releases #pico-sdk #das software-developer-kit(sdk) für den pico #ich hab mir einen unterordner erstellt in dem ich die sdk und später auch die pico-example ablege. $ mkdir pico $ cd pico $ git clone -b master https://github.com/raspberrypi/pico-sdk.git $ cd pico-sdk $ git submodule update --init $ cd .. #pico-examples: #von der Raspberry-Pi-foundation zur verfügung gestellte folder mit verschiedenen beispielprogrammen für das Pico #es muss ein build ordner erstellt werden in dem dann alle examples gebildet werden. #mein terminal befindet sich gerade in dem zuvor erstellten order .../pico/ $ git clone https://github.com/raspberrypi/pico-examples.git $ cd pico-examples/ $ mkdir build $ cd build #um die anwendungen in pico-examples zu builden muss zuerst cmake und gcc-arm-none-eabi installiert werden $ sudo apt install cmake $ sudo apt install gcc-arm-none-eabi #in diesem build ordner kann nun mit dem terminal der sdk_path gesetzt werden, mit dem nachfolgenden echo-befehl kann #überprüft werden ob der Pfad richtig gesetzt wurde, anschließend kann mit dem cmake befehl die ordner sowie die #makefiles für die jeweiligen projekte erstellt werden $ export PICO_SDK_PATH="pfad zum pico-sdk" (bei mir /home/fs/pico/pico-sdk) $ echo $PICO_SDK_PATH $ cmake -DCMAKE_BUILD_TYPE=Debug .. (.. am ende nicht vergessen, sonst funktionierts nicht...) #nun sollten c.a. 28 ordner erstellt worden sein, unter anderem "blink" und "hello_world" #Im den Ordnern sollte jeweils ein makefile liegen, mit einem Terminal in diesem Ordner kann nun das Projekt mit make #gebildet werden, oder sdie makefiles wurden direkt in den jeweiligen ordnern unter /home/fs/pico/pico-examples/ #gebildet $ make #der zugehörige c-code befidnet sich in ../pico-examples/ordner-xy/ während sich die .elf datei in --/pico-examples/#build/ordner-xy/ befindet. #erstelle im ordner /home/fs/pico/ ein verzeichnis mit dem namen insight #lade arm-none-eabi-insight.tar.gz von LabDisk(falls sie bis dahin dort hingelegt wurde?) runter und lege es in /home/#fs/pico/insight ab #gehe in das verzeichnis /opt und öffne ein Terminal, entpacke das die arm-none-eabi-insight.tar.gz mit folgendem #befehl $ sudo tar -xzvf /home/fs/pico/insight/arm-none-eabi-insight.tar.gz #anschließend muss der pfad der $PATH variable angepasst werden, hierzu geben wir uns $PATH mit dem echo befehl aus, kopieren den ausgegebenen Pfad und schreiben den pfad /opt/arm-none-eabi-insight/bin dazu (evtl in bashrc anpassen) $ echo $PATH $ export PATH=/opt/arm-none-eabi-insight/bin:<> #anschließend müssen noch einige abhängigkeiten installiert werden $ sudo apt install libpython2.7 $ sudo apt install itk3* $ sudo apt install iwidgets4* #nun sollte der insight mit folgendem befehl gestartet werden können $ arm-none-eabi-insight #gdb-multiarch(wird nur benötigt solange arm-none-eabi-gdb/insight noch nicht funktioniert) #cross-plattform debugger $ sudo apt install gdb-multiarch # # #Damit ist alles installiert was, was zu debuggen benötigt wird # # #zum starten des Debugging #reset knopf am Pico gedrückt halten und einstecken, nach kurzer zeit sollte sich der Pico als File-manager öffnen #das pico-debug-gimmecache in den Pico ziehen, daraufhin sollte sich der file-manager von selbst schließen #anschließend terminal an beliebigen ort öffnen und eingeben (evtl mit sudo davor): $ sudo openocd -f board/pico-debug.cfg #jetzt werden einige infos ausgegeben, letzt zeile sollte lauten: "Listening on port 3333 for gdb connection" #terminal offen lassen #navigiere in einen Ordner mit einer .elf datei, z.b. pico-examples/builtui d/blink/ #falls das Projekt noch nicht gebildet wurde, muss es hier noch von einem terminal aus mit $ make gebildet werden. #nun sollte unter anderem eine .elf datei vorhanden sein #im ordner der .elf datei nun den insight starten $ echo $PATH $ export PATH=/opt/arm-none-eabi-insight/bin:<> $ arm-none-eabi-insight blink.elf (oder beliebige andere elf datei) #unter file>target settings kann nun remote/tcp eingestellt werden, als hostname: localhost und port: 3333 #unter run>connect to target kann nun die verbindung getestet werden #alles folgende sind nur anmerkungen #nun verbinden wir uns mit gdb-multiarch mit dem pico #nicht nötig, wennd er snavigator genutzt wird $ gdb-multiarch blink.elf (hier die elf dateinamen des zu debuggenden Prgramms einfügen) (gdb) target remote localhost:3333 //verbindet sich über openocd mit dem pico (gdb) load //läd den quellcode auf den Pico (gdb) monitor reset init //resettet den pico und lässt in mit dem neuen quellcode starten (gdb) b main //brakepoint in der main() (gdb) tui enable // aktiviert eine rudimentäre debugoberfläche (gdb) step(i) //mit geht ein c-befehl weiter oder mit i geht ein assembly-befehl weiter (gdb) continue //geht bis zum nächsten brakepoint, kann mit strg+c gestoppt werden (gdb) quit //beendet gdb #snavigator: #ist in manfred seinem arm-eb63-elf packet drinn sudo dbkg -i Arm-eb63-elf.deb #entgegen einem online-guide scheint python3 nicht benötigt zu werden, falls doch hier der bash-befehl $ sudo apt-get install python3 python3-pip