"reboot" über Serielle Schnittstelle (/dev/ttyACM0) unter Linux ausführen

OP #3758696
Hallo,

ich möchte vom AVR über die Serielle Schnittstelle Befehle (reboot, 
shutdown - h now usw.) an das OS von Linux senden und ausführen lassen. 
Verbindung mit minicom oder picocom funktioniert. Mir ist aber nicht 
ganz klar wie ich die empfangenen Daten von z.B. picocom an das 
Betriebssystem weiterleiten kann.
Es wäre schön wenn ich über die serielle Schnittstelle "reboot" sende 
Linux einen reboot ausführt. Geht das nur über ein script empfangene 
zeichnen über picocom einlesen und entsprechend darauf reagieren? 
Irgendwelche Tipps für mich?

Danke!!

Kai
OP
Habe Ubuntu 12.04.3 LTS. Wie kann ich per bash die Ausgabe von "minicom 
-b 38400 /dev/ACM0" in eine Variable umleiten?

#!/bin/bash
test="Text"
echo "$test"
test = minicom -b 38400 /dev/ACM0 # oder wie auch immer ???
echo "$test"
exit 0
Gast
Du brauchst kein minicom...kannst doch direkt mit cat, tail etc auf dem 
descriptor arbeiten. Vorher über stty konfigurieren..

BTW. Tu dir selber nen gefallen und nimm Python, Node.js o.ä. ..per 
Shell Script macht das doch keinen Spaß ;)
Moderator
Am einfachsten geht das mit
1
bash </dev/ttyS0

Dann kannst du von einem über die serielle Schnittstelle verbundenen
Rechner mit
1
echo "shutdown -h" >/dev/ttyS0

den Shutdown-Befehl senden (sofern die oben gestartete Shell mit
entsprechenden Rechten ausgestattet ist).

Wenn du nicht nur blind ein paar Befehle versenden möchtest, sondern
eine komplette interaktive Konsole (inkl. Login-Aufforderung) auf dem
zweiten Rechner möchtest, startest du auf dem Zielrechner
1
agetty /dev/ttyS0 38400

und auf dem zweiten Rechner ein Terminalprogramm (bspw. minicom).
OP
Oh neee wie simpel!!

zuer mal ein
1
stty -F /dev/ttyACM0 cs8 38400 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts
absetzen.

dann eine Umleitung von ttyACM0 zur bash
1
bash < /dev/ttyACM0

und vom Microcontroller über UART senden was mann auführen möchte.

Jetzt bräuchte ich nur noch einen Tipp an welchen Orten unter Linux ich 
die beiden Befehle eintragen muss damit's nach einem reboot auch wieder 
funktioniert.

Danke im vorraus!!!
Moderator
Kai G. schrieb:
> Jetzt bräuchte ich nur noch einen Tipp an welchen Orten unter Linux ich
> die beiden Befehle eintragen muss damit's nach einem reboot auch wieder
> funktioniert.

Vermutlich (ich verwende kein Ubuntu) kannst du sie in /etc/rc.local
eintragen:

  http://wiki.ubuntuusers.de/rc.local


Reinhard S. schrieb:
> Yalu X. schrieb:echo "shutdown -h" >/dev/ttyS0
>
> Müsste das nicht "shutdown -h now" heißen? So kenne ich es bis jetzt
> zumindest (Debian).

Das "now" habe ich in Kais Anfrage einfach nur übersehen. Der Shutdown
wird aber auch ohne dieses Argument ausgeführt, allerdings mit einer
Verzögerung von 1 Minute. Vorher werden alle eingeloggten Benutzer noch
gewarnt, um ihnen die Chance zu geben, ihre offenen Dateien zu
speichern.

Da Kai den Rechner remote shutdownen möchte und er u.U. nicht sehen
kann, ob noch jemand an dem Rechner arbeitet, ist es vielleicht sogar
ratsam, das "now" wegzulassen ;-)
Yalu X. schrieb:
> Kai G. schrieb:
>> Jetzt bräuchte ich nur noch einen Tipp an welchen Orten unter Linux ich
>> die beiden Befehle eintragen muss damit's nach einem reboot auch wieder
>> funktioniert.
>
> Vermutlich (ich verwende kein Ubuntu) kannst du sie in /etc/rc.local
> eintragen:

eher nicht

Für die Verwaltung der Konsolen ist init zuständig. Bzw. in neueren 
Distributionen upstart oder systemd. Letztere sind aber zumindest in 
diesem Punkt abwärtskompatibel. Das Configfile das man dafür ändern 
möchte, ist /etc/inittab:
1
~ $cat /etc/inittab | tail -9 
2
# Example how to put a getty on a serial line (for a terminal)
3
#
4
#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
5
#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100
6

7
# Example how to put a getty on a modem line.
8
#
9
#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3

Zu beachten ist, daß man so einen Login-Prompt auf der seriellen 
Schnittstelle bekommt. Der µC muß sich also erst mit einem gültigen 
Account einloggen bevor er Kommandos absetzen kann. Allerdings will man 
das auch genauso.


XL

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.