16  FAQ

16.1 Test der virtuellen Maschine

Ab WS23/24 verwenden wir nicht mehr die VirtualBox VM, sondern steigen auf das Windows Subsystem for Linux in der Version 2 (WSL2) um.

  1. Oktober 2020

Ich habe den Test auf einem Notebook Lenovo T420 gemacht (Core i5). Als Host-Betriebssystem ist ebenfalls Xubuntu Linux 20.04.1 installiert.

  • Anleitung zum Einrichten der VM (VPN!)

    https://ti-wiki.informatik.hs-augsburg.de/doku.php?id=rt-labor_rtvm

  • Virtualbox 6.1.14

  • Gastbetriebsystem: Xubuntu Linux (Ubuntu 20.04.1 LTS “focal”)

  • Immer als gewöhnlicher User “rtlabor” arbeiten. Für Administrationsaufgaben immer nur kurzzeitig Superuser (root) werden.

  • Praktisch: Clipboard zwischen Host- und Gastbetriebssystem einrichten (VM -> Settings -> General -> Advanced Shared Clipboard : auf “bidirectional” -> setzen)

  • Software-Updater starten (“Aktualisierungsverwaltung”)

  • Pakete nachinstallieren (gdb benötigt diese):

    • libncurses5
    • libpython2 (es kann auch sein, dass dieses Paket bei Ihnen libpython2.7 heisst!)
    • python3-docutils (das Programm rst2html.py wird in manchen Makefiles benoetigt)
  • USB Anschluss für den OpenOCD in VirtualBox konfigurieren durch Einrichten eines USB Filters. Können Sie auch erst mal überspringen, falls Sie noch kein Board haben.

    Die Ausgabe des Kommandos lsusb auf der VM muss folgende Zeile enthalten:

    Bus 002 Device 005: ID 0483:374b STMicroelectronics ST-LINK/V2.1
  • Die Datei ~/.tmux-conf muss richtig ~/.tmux.conf heissen! Also umbenennen, wenn Sie mit tmux arbeiten möchten. Der Inhalt kann gerne nach Geschmack angepasst werden. In meiner Vorgabe ist der Standard Kommando-Präfix Ctrl-b durch Ctrl-z ersetzt!

  • Auch ~/.vimrc anpassen, wenn man möchte.

  • Einen ssh Schlüsselpaar anlegen. Ich habe das mit dem Aufruf von ssh-keygen -t ed25519 erledigt, so wie das in

    https://docs.gitlab.com/user/ssh/

    beschrieben ist. Der öffentliche Schlüssel (~/.ssh/id_ed25519.pub) muss in gitlab eingetragen werden. Nur wenn man das gemacht hat, kann man ein git Repository per ssh://… klonen.

  • Das estool Programm updaten:

    Git Repo klonen

    git clone https://gitlab.com/hhoegl-tha/es/estool.git

    Installieren, bzw Updaten wegen der -U Option:

    cd estool
    pip3 install -U .

    Der Update erfolgt mit User Rechten, da die Installation im Home-Verzeichnis unter ~/.local liegt.

    Es muss danach mindestens folgende Version ausgegeben werden:

    rtlabor@rtvm:~$ estool --version
    ESTOOL version 0.25 (2020-10-22)
  • Beispiel “starter” testen (vorher das Nucleo Board anstecken!):

       cd ~/es2/starter
       git pull               # Updaten
       estool --start-oocd    # OpenOCD im Hintergrund starten. Siehe auch --ask-oocd
       make                   # kompilieren
       make flash             # Programm auf STM32 uebertragen. USB Verbindung zum Board muss funktionieren.
                              # Ab hier läuft das Programm auf dem STM32
       make gdb               # Debugger starten. Verlassen mit "q" oder "quit"
       estool --stop-oocd     # OpenOCD beenden
    
    Im Gitlab ist das Beispiel unter https://gitlab.informatik.hs-augsburg.de/es2/es2-nucl476/starter
    zu finden.

Wer im gdb schon mal eine kleine Übung machen möchte, der kann “n [RET]” eingeben, also ein n (= next) und die Eingabetaste (“Return”). Damit wird die nächste Quelltextzeile im Debugger ausgeführt. Danach gibt man nur noch wiederholt [RET] ein, um Zeilen auszuführen.

16.2 RTLAB-Remote

Der Rechner rtlab-remote hat eine Intel i7-3770K CPU mit 8 Kernen und 16 GByte Speicher.

16.2.1 Einloggen

VPN Verbindung zur Hochschule aufbauen

ssh <rzlogin>@rtlab-remote.informatik.hs-augsburg.de

In ~/.bashrc aufnehmen:

export PATH=/opt/openocd-dev/bin:/opt/gcc-arm-none-eabi-9-2020-q2-update/bin:$PATH
. /opt/py_venv3.8.3/bin/activate

Datei einlesen mit . ~/.bashrc. Nun sollte das Kommando estool zur Verfügung stehen.

16.2.2 Beispiel “starter” von gitlab holen und kompilieren

git clone <repo starter>

Dazu muss vorher der öffentliche ssh Schlüssel in gitlab eingetragen worden sein.

In das Verzeichnis starter wechseln mit cd starter

Das Programm mit make kompilieren. Die Ausgabe sollte so ausschauen:

 (py_venv3.8.3) hhoegl@gorilla:~/gorilla/starter$ make 
 [MKDIR] obj
 mkdir -p obj
 [CC] startup.c
 arm-none-eabi-gcc -g3 -Wall -Wpedantic -Wextra -std=gnu99 -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16  -c -o obj/startup.o Src/startup.c
 [CC] osc.c
 arm-none-eabi-gcc -g3 -Wall -Wpedantic -Wextra -std=gnu99 -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16  -c -o obj/osc.o Src/osc.c
 [CC] usart.c
 arm-none-eabi-gcc -g3 -Wall -Wpedantic -Wextra -std=gnu99 -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16  -c -o obj/usart.o Src/usart.c
 [CC] itoa.c
 arm-none-eabi-gcc -g3 -Wall -Wpedantic -Wextra -std=gnu99 -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16  -c -o obj/itoa.o Src/itoa.c
 [CC] main.c
 arm-none-eabi-gcc -g3 -Wall -Wpedantic -Wextra -std=gnu99 -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16  -c -o obj/main.o Src/main.c
 arm-none-eabi-gcc  -TSTM32L476RG_FLASH.ld -Wl,-Map,main.map -nostdlib -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -nostartfiles -o main.elf obj/startup.o obj/osc.o obj/usart.o obj/itoa.o 
 obj/main.o  
 [SIZE] main.elf
 arm-none-eabi-size main.elf
   text    data     bss     dec     hex filename
   1280       8    1572    2860     b2c main.elf
 arm-none-eabi-objcopy -Obinary main.elf main.bin
 arm-none-eabi-objdump -S main.elf > main.lst

16.2.3 Board mit estool verwalten

Prüfen

 $ estool  --bs-check
 Board server running
 No board reserved

Reservieren

Die Boards werden durch die Zahlen 0, 1, 2, 3 gekennzeichnet. Das erste Board hat also die Id 0. Man kann nur ein Board zu einer Zeit reservieren.

 $ estool --bs-reserve
 Reserved board 0 for user hhoegl
 Started Openocd (pid 2382)

Prüfen

 $ estool --bs-check
 Board server running
 Board 0 reserved for user hhoegl
 Openocd is running (pid=2382, telnet_port=4445 gdb_port=3334)
 Usage time: 2/20 min
 Board Access (use VPN!):
 - Webcam (Video Stream): http://rtlab-remote.informatik.hs-augsburg.de:8091 (nur HTTP, kein HTTPS!)
 - Saleae Logic (VNC): rtlab-remote.informatik.hs-augsburg.de:5901
 - Nucleo serial port: /dev/rtlab/nucleo1_tty

Freigeben

 $ estool --bs-free
 Freeing board 0 for user hhoegl

Board zurücksetzen

 $ estool --bs-erc reset

Eingänge einlesen

 $ estool --bs-erc leds

Ausgänge setzen

 $ estool --bs-erc buttons=8     # user button druecken (log. 0) ...
 $ estool --bs-erc buttons=0     # ... und wieder loslassen (log. 1)

Ausgänge lesen

 $ estool --bs-erc buttons

Programm flashen und ausführen

$ make flash

17 Serielle Schnittstelle

Die serielle Schnittstelle zum Ziel-Mikroprozessor wird über die Gerätedatei geöffnet, die beim Kommando --bs-check als “Nucleo serial port: …” angezeigt wird. Wenn diese Gerätedatei z.B. /dev/rtlab/nucleo1_tty ist, dann kann man auf dem Server das Kommando

  $ picocom -b 9600 /dev/rtlab/nucleo1_tty

verwenden. Die Zahl 9600 ist die Baudrate. Sie muss identisch sein mit der Baudrate, die auf dem Mikrocontroller programmiert wurde. Picocom beendet man mit Ctrl-A-X (Ctrl drücken, dann nacheinander A und X).

Es sind ausserdem die Programme minicom und putty installiert.

Es gibt noch eine zweite Möglichkeit: Dazu gibt man einfach estool --termemu ein. Das wird im Makefile beim Target make serial verwendet. In diesem Fall ist das Kommando in .estool/estool.yaml vorkonfiguriert. Der übliche Eintrag in dieser Datei ist:

   termemu-command: [picocom, -b, '9600', --quiet, '{termemu_device}']

Den Platzhalter {termemu_device} füllt estool selber aus mit der aktuellen Gerätedatei zur seriellen Schnittstelle. Man kann dieses Kommando jederzeit ändern. Wichtig ist, dass man die korrekte Schreibweise (eckige Klammern, Komma) einhält.

18 Board über Webcam betrachten

VPN Verbindung zur Hochschule aufbauen.

Den Webcam-Videostrom betrachtet man z.B. mit vlc:

vlc http://rtlab-remote.informatik.hs-augsburg.de:8091 

Hinweis: Der genaue URL wird von estool --bs-check ausgegeben, falls Board reserviert wurde.

19 GUI des Saleae Logikanalysators betrachen

Das Programm Logic läuft auf dem rtlab-remote Rechner.

Einen VNC Client installieren, z.B. Tiger-VNC oder Remmina.

Tiger VNC: apt install tigervnc-viewer tigervnc-common

VPN Verbindung zur Hochschule aufbauen

$ vncviewer rtlab-remote.informatik.hs-augsburg.de:5901      

Als Passwort mypasswd eingeben.

Hinweis: IP-Nummer und Port wird von estool --bs-check ausgegeben, falls Board reserviert wurde.

20 Boardserver

Auf dem rtlab-remote Server läuft das Programm boardserver im Hintergrund, es erledigt alle Sachen die beim Reservieren und Freigeben der Boards nötig sind. Der Quelltext (Python) ist frei, siehe

Repo “boardserver”

21 Rekursive Suche in Verzeichnissen

  • Zum Beispiel mit rg Kommando (“ripgrep”, https://github.com/BurntSushi/ripgrep). Ist auf dem RTLab-Remote Server installiert.

  • Suche nach dem String “EXTI” in allen .c und .h Dateien in und unter dem aktuellen Verzeichnis:

      rg -g '*.[ch]' EXTI
  • Kommandoübersicht

    https://www.philipdaniels.com/blog/2019/ripgrep-cheatsheet

22 Microcom holen und übersetzen

(Hinweis: Microcom sollte auch in den Distributionen enthalten sein. In Debian/Ubuntu einfach installieren mit apt install microcom).

  sudo apt install libreadline-dev
  git clone git://git.pengutronix.de/tools/microcom
  cd microcom
  autoreconf -i 
  ./configure
  make  
  # nun sollte man das "microcom" Executable im aktuellen Verzeichnis haben

  # Default speed ist 115200, default port /dev/ttyS0
  microcom --speed=115200 --port=/dev/ttyS0

  Beenden: Mit Ctrl-\ kommt man zu einem Menue, dann "quit" tippen. Ctrl ist auf deutschen 
  Tastaturen die Strg Taste.

22.1 OpenOCD 0.12.0 kompilieren

(Hinweis: OpenOCD ist in allen gängigen Distributionen enthalten und ist somit einfach z.B. mit sudo apt install openocd zu installieren)

102.10.2023

  1. OpenOCD Archiv holen

       wget https://hhoegl.informatik.hs-augsburg.de/es2/tools/openocd-0.12.0.tar.bz2
  2. Ein paar Abhängigkeiten installieren (falls sie noch nicht installiert sind).

       apt install libtool pkg-config libusb-1.0-0-dev automake autoconf
  3. Entpacken

      tar jxvf openocd-0.12.0.tar.bz2
      cd openocd-0.12.0
  4. Bootstrap ausführen

       ./bootstrap
  5. Konfigurieren und kompilieren

       ./configure --enable-stlink --prefix=/opt/openocd-0.12.0
       make 
  6. Installieren

       sudo make install