Serielle Konsole

* Achtung: Auf Pegel achten, nicht jeder Adapter ist für jedes Board geeignet. *

Hostrechner direkt verbunden

Der Zugriff über die serielle Schnittstelle ist vorallem dann notwendig, wenn keine Bildschirmausgabe zu erwarten ist und das System nicht selbstständig soweit hochfährt, dass man es über das Netzwerk erreichen kann. Der Bootloader z.B. bietet keinen SSH-Zugang oder ähnliches, und beim eingebetteten Systemen ist häufig kein externes Display vorgesehen oder es funktioniert im dieser Phase schlicht noch nicht.

Serielle Schnittstellen werden vom Kernel als zeichenorientierte Geräte erkannt und als TTY bereitgestellt. Besitzt der Hostrechner nativ eine serielle Schnittstelle, ist diese unter Linux in der Regel als TTYS0 im dev Verzeichnis /dev zu finden. Inwischen häufiger sind jedoch USB-to-Serial-Adapter, die wiederum /dev/ttyUSB0 heißen.

In unserem Fall stellt quasi der RaspberryPi als Server eine serielle Konsole auf dem Extension Header bereit.

# You can list all TTYs like that:
$ ls -la /dev/tty*

# Or grep for newly attached tty in dmesg
$ dmesg | grep tty
[   10.719399] usb 1-1.4.1: pl2303 converter now attached to ttyUSB0
[   10.721019] usb 1-1.4.3: pl2303 converter now attached to ttyUSB1

Der Entwicklungsrechner ist also Client und der Benutzer muss Lese- und Schreibrechte auf dieses zeichenorientierte Gerät haben. Ist dies nicht der Fall, muss der Benutzer erst zur zugriffsberechtigten Gruppe hinzugefügt werden, hier dialout.

# Check who is able to get rw permissions
$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 4, 64 2015-01-01 01:01 /dev/ttyS0

# Check wheater you are part of the group
$ id -Gn |grep dialout

sudo adduser $USER dialout

Um auf nun auf die serielle Schnittstelle zugreifen zu können, bedarf es einem Terminal Emulator wie z.B. cu, minicom, picocom oder kermit

$ cu -l /dev/ttyUSB0 -s 115200

$ picocom /dev/ttyUSB0 -b 115200 -p n -d 8 -r -l
# To end session, use Ctrl-A, Ctrl-X

Wurde der oben genannte Schritt übersprungen, kann der Emulator auch mit sudo aufgerufen werden, die ist aber nicht empfohlen.

Alternativ kann man auch screen als Serial Client verwenden.

$ screen /dev/ttyUSB0 115200
# To end the session, use Ctrl-A,Shift-K

Fernzugriff auf die Serielle Schnittstelle

Konsolen server

Installieren Sie das Paket ser2net von den Ubuntu Paketquellen und konfigurieren Sie es mit einem Editor:

$ sudo apt-get install ser2net
$ vim /etc/ser2net.conf
$ tail /etc/ser2net.conf
...
2000:telnet:600:/dev/ttyUSB0:115200 8DATABITS NONE 1STOPBIT banner
2001:telnet:600:/dev/ttyUSB1:115200 8DATABITS NONE 1STOPBIT banner
#2000:telnet:600:/dev/ttyS0:9600 8DATABITS NONE 1STOPBIT banner
#2001:telnet:600:/dev/ttyS1:9600 8DATABITS NONE 1STOPBIT banner
#3000:telnet:600:/dev/ttyS0:19200 8DATABITS NONE 1STOPBIT banner
#3001:telnet:600:/dev/ttyS1:19200 8DATABITS NONE 1STOPBIT banner

Wie Sie in diesem Beispiel erkennen können, kann für jeden Port eine andere Konfiguration gewählt werden. Ich habe die Standard Einträge auskommentiert und für ttyUSB0 und ttyUSB1 eigene Einstellungen vorgenommen.

http://manpages.ubuntu.com/manpages/trusty/man8/ser2net.8.html

Nach dem ändern der Konfiguration müssen wir den Dienst neu starten. Der Dienst soll zudem beim Systemstart hochfahren.

$ sudo service ser2net restart
$ sudo /etc/init.d/ser2net restart # Old style if the first one doesn't work.

Konsolen Client

Wenn sie in ser2net Telnet aus Option gewählt haben, können Sie eine Session öffnen indem Sie Telnet IP (Hostname) und einen Port übergeben:

$ telnet [host [port]]