#format rst #language de Elinux Remote ============= H\. Högl, April 2021 .. contents:: .. sectnum:: "Elinux Remote" ist ein Server, der im G2.16 steht. Mit dem Server sind zwei Beagle Bone Black Boards (BBB) verbunden. Man kann sich mit seinen RZ Zugangsdaten von zu Hause aus mit ssh einloggen, dazu muss aber vorher eine VPN Verbindung aufgebaut werden: .. code-block:: bash $ ssh elinux-remote.informatik.hs-augsburg.de Alternativ kann man sich (ohne VPN) zunächst per ssh mit dem RZ Rechner ``login.hs-augsburg.de`` verbinden und von dort dann eine zweite SSH Verbindung zum elinux-remote Rechner aufmachen. .. |A| image:: http://hhoegl.informatik.hs-augsburg.de/elinux/remote/elinux-remote-7.jpg :target: http://hhoegl.informatik.hs-augsburg.de/elinux/remote/elinux-remote-7.jpg :width: 40% .. |B| image:: http://hhoegl.informatik.hs-augsburg.de/elinux/remote/elinux-remote-2.jpg :target: http://hhoegl.informatik.hs-augsburg.de/elinux/remote/elinux-remote-2.jpg :width: 20% Hier sieht man, wie der Aufbau aussieht (beim Draufklicken werden die Bilde grösser) |A| |B| Der Rechner ist ein ``Intel Xeon E3-1220 4-core v3 @ 3.10GHz`` (siehe ``cat /proc/cpuinfo``) mit 32 GByte RAM. Er sollte also von der Rechenleistung her auch für grössere Kompilierarbeiten geeignet sein. Aber Vorsicht: Wer viel kompilieren möchte, sollte das nicht im Homeverzeichnis machen! Da dies mittels NFS vom Rechenzentrum gemountet ist, geht der Dateizugriff vor allem wenn man viele kleine Dateien hat ziemlich langsam. Am besten man erledigt diese Sachen auf der sehr schnellen internen Platte, z.B. in ``/tmp`` (wird aber beim Booten gelöscht!). Besser ist es in den Arbeitsbereichen ``/home/elinux_work`` und ``/home/elinux_work2`` zu arbeiten. Blockschaltbild --------------- Das Blockschaltbild sieht wie folgt aus. Einige GPIO Leitungen des Beagle Board können über einen "Embedded Remote Controller" (ERC) angesteuert werden. Der ERC ist mit einem ESP8266 Board ("NodeMCU") realisiert worden. Der ERC kann dazu vom PC aus über eine serielle Schnittstelle Kommandos erhalten (ser-erc). Die Konsole des Beagle Bone ist über eine serielle Schnittstelle mit dem PC verbunden (ser-console). Das Beagle Board ist ausserdem über ein Ethernet-Kabel an das Intranet der Hochschule angeschlossen (eth-bbb). .. image:: http://hhoegl.informatik.hs-augsburg.de/elinux/remote/elinux-remote-schema.png :target: http://hhoegl.informatik.hs-augsburg.de/elinux/remote/elinux-remote-schema.png :width: 60% :align: center | Die Abbildung zeigt nur ein BBB/ERC am Server. Beim aktuellen Aufbau sind zwei solcher (gestrichelten) Einheiten angeschlossen. **BBB1** .. code-block:: text hostname beaglebone1 eth-bbb rt-bbb-elinux-1.informatik.hs-augsburg.de (141.82.48.186) pwd debian / elin21BB und root / elin21root ser-console /dev/rtlab/tty_elinux-001 (115200 Baud) ser-erc /dev/rtlab/tty_erc_0005 WebCam http://elinux-remote.informatik.hs-augsburg.de:8091 (VPN) **BBB2** .. code-block:: text hostname beaglebone2 eth-bbb rt-bbb-elinux-2.informatik.hs-augsburg.de (141.82.48.187) pwd debian / elin21BB und root / elin21root ser-console /dev/rtlab/tty_elinux-002 (115200 Baud) ser-erc /dev/rtlab/tty_erc_0006 WebCam http://elinux-remote.informatik.hs-augsburg.de:8092 (VPN) Die Webcam kann über VPN z.B. mit ``vlc`` betrachtet werden (``vlc ``). **Achtung** Zum Zugreifen auf die Boards soll man immer mit dem **Boardserver** arbeiten. Das ist das **bbb** Programm im nächsten Abschnitt. Boardserver ----------- Der Zugriff auf die Boards wird elementar von einem "Boardserver" gesteuert. Der Boardserver übernimmt die Reservierung und beendet nach abgelaufener Zeit alle Prozesse. .. code-block:: bash Usage: bbb [opts] [args] Options: -h, --help this help --check check for board server running and board reservation --reserve reserve board --free free board --erc=BS_ERC io operation with embedded remote controller (--bs-erc reset|power|leds|buttons|buttons=4|buttons=12|buttons=0xf Bye. Beispiele: .. code-block:: bash $ bbb --check $ bbb --reserve $ bbb --check Board server running Board 0 reserved for user hhoegl Usage time: 5/30 min Board Access (use VPN!): - BBB console: /dev/rtlab/tty_elinux-001 - Webcam (Video Stream): http://elinux-remote.informatik.hs-augsburg.de:8091 $ bbb --erc buttons {'buttons': 8, 'error': False, 'leds': 1} # gibt buttons und leds zurueck $ bbb --erc leds {'buttons': 8, 'error': False, 'leds': 0} # gibt buttons und leds zurueck $ bbb --erc buttons=0xa {'buttons': 10, 'error': False, 'leds': 0} $ bbb --erc reset # Board neu starten $ bbb --free Nachdem die maximale Zeit abgelaufen ist, oder nach einem --free, werden die Prozesse abgeschossen, welche auf die seriellen Schnittstellen ser-console und ser-erc zugreifen. Eine ssh Verbindung zum BBB über eth-bbb wird nicht beendet. Der Quelltext: https://r-n-d.informatik.hs-augsburg.de:8080/hubert.hoegl/boardserver_bbb Embedded Remote Controller --------------------------- Der Code ist auf Gitlab: https://r-n-d.informatik.hs-augsburg.de:8080/michael.schaeferling/embedded-remote-controller In der README.md Datei steht, wie man auf den ERC über die serielle Schnittstelle zugreift. Eine Besonderheit ist, dass zum Abschluss der Zeilen ein ``\n`` (LF, 0x0A) erwartet wird, auch bei der Ausgabe wird LF verwendet. Man muss ``picocom`` wie folgt starten, damit man die Ausgabe sieht: .. code-block:: bash $ picocom -b 115200 /dev/rtlab/tty_erc_0006 -c --omap=crlf --imap=lfcrlf Es gibt keinen Prompt, man gibt einfach das Kommando ein, z.B. INFO und erhält dann die Ausgabe: .. code-block:: text INFO INFO: ERC (Embedded-Remote-Controller), rev=0.3, debug_msg=0, rst_active=0, pwr_active=0, btn_inv=1 | Testskripte auf BBB ------------------- pin_all_off.sh :: #!/bin/bash cd /sys/class/gpio/ echo out > gpio44/direction echo out > gpio45/direction echo out > gpio46/direction echo out > gpio47/direction echo 0 > gpio44/value echo 0 > gpio45/value echo 0 > gpio46/value echo 0 > gpio47/value pin_test_passthrough.sh :: #!/bin/bash cd /sys/class/gpio/ echo in > gpio66/direction echo in > gpio67/direction echo in > gpio68/direction echo in > gpio69/direction echo out > gpio44/direction echo out > gpio45/direction echo out > gpio46/direction echo out > gpio47/direction while true do cat gpio66/value > gpio44/value cat gpio67/value > gpio45/value cat gpio68/value > gpio46/value cat gpio69/value > gpio47/value done led_loop (Python) .. code-block:: python #!/usr/bin/env python3 # H. Hoegl, 2021-04-19 import os, time GPIOSTR = "echo {val} > /sys/class/gpio/gpio{nr}/{op}" if __name__ == "__main__": os.system(GPIOSTR.format(val="out", nr="44", op="direction" )) n = 0 while True: print("loop", n) os.system(GPIOSTR.format(val="1", nr="44", op="value")) time.sleep(1) os.system(GPIOSTR.format(val="0", nr="44", op="value")) time.sleep(1) n += 1