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

#3758696
Lesenswert?

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
Gast #3758804
Lesenswert?

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 #3758855
Lesenswert?

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).
#3758952
Lesenswert?

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 #3759023
Lesenswert?

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 ;-)
#3759657
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren