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
Du kannst dir eine ganz normale Konsole auf der Seriellen Schnittstelle bereitstellen: https://www.kernel.org/doc/Documentation/serial-console.txt
Wollte aber wirklich nicht den Kernel neu Kompilieren!
Welche Distribution nutzt du denn ? Ansonsten schreib dir halt nen Script...
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
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ß ;)
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).
Yalu X. schrieb:
1 | echo "shutdown -h" >/dev/ttyS0 |
Müsste das nicht "shutdown -h now" heißen? So kenne ich es bis jetzt zumindest (Debian).
:
Bearbeitet durch User
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!!!
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 ;-)
Serielle console lässt sich auch auf der kernelcommandline setzen, oder einen Getty drauf starten.
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.