www.mikrocontroller.net

Forum: PC-Programmierung Frage zu Linux Bash-Befehl "echo"


Autor: TOM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich sitze gerade vor einem Skript eines Embedded Linux (TriCore-System), 
in dem mit den Echo-Befehl direkt auf die Hardware geschrieben wird:

# Revoke request & LED on
echo 001 > /dev/gpio/port4
echo 300 > /dev/gpio/port3

Ich verstehe das Format der zu sendenden Daten nicht "001" bzw. "300". 
Laut echo-Beschreibung sollte das doch immer ein String sein?
Wie ist das zu verstehen?

Danke

Gruß

Thomas

Autor: RFr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es wird einfach der Wert in den entsprechenden Stream geschrieben.
Gruss
Robert

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> # Revoke request & LED on
> echo 001 > /dev/gpio/port4
> echo 300 > /dev/gpio/port3
>
> Ich verstehe das Format der zu sendenden Daten nicht "001" bzw. "300".
> Laut echo-Beschreibung sollte das doch immer ein String sein?

Ja.

> Wie ist das zu verstehen?

Es wird ein String gesendet.

Autor: TOM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann verstehe ich den Sinn aber nicht, wieso werden zum einschalten der 
LED an Port4 dann drei Bytes gesendet? Dann sollte doch eins reichen. 
Übrigens sind in allen Skripten, die derart auf die Ports schreiben 
immer 3 Zeichen lange Argumente als Datenquelle. Das leuchtet mir nicht 
ein. Ein String wäre ja ein sequenzielles senden der drei Bytes.

Autor: Hannes J. (Firma: eHaJo.de) (joggl) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich glaube das alles liegt am betriebssystem hinter den ports.
Du schreibst ja nicht "direkt" ne 1 auf das Port sondern schreibst die 
Info als Text in den Port-Node vom Betriebssystem. Das darinstehende 
wird dann vom entsprechenden Treiber ausgewertet und bearbeitet...

/hannes

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TOM wrote:
> Dann verstehe ich den Sinn aber nicht, wieso werden zum einschalten der
> LED an Port4 dann drei Bytes gesendet? Dann sollte doch eins reichen.

Du kannst aber nicht ein einzelnes Byte so einfach als einzelnes 
ASCII-Zeichen senden. Es ist besser, wenn es irgendwie kodiert wird, und 
da kommt es dann halt darauf an, wie der dahinter liegende Treiber es 
gerne hätte. Dieser möchte anscheinend durch '\n' separierte Oktalwerte 
(als String) haben.

Autor: TOM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt verstehe ich ein bisschen mehr. Mir fehlt wohl etwas das 
Verständnis wie sich der Treiber dort einhängt und die Übergabe der 
Werte stattfindet. Ich bin noch nicht fit auf dem Gebiet der 
Linux-Innereien, aber das wird noch...

Danke Euch

Gruß

Thomas

Autor: Hannes J. (Firma: eHaJo.de) (joggl) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Treiber "hängt" sich nicht auf das Device ein.
Der Treiber (grob gesagt) erzeugt das Device, also /dev/gpio/*.
(fein gesagt: der treiber erzeugt ein node irgendwo in /sys und das 
darüberliegende device-pogramm [devfs, udev] erzeugt dann die node in 
/dev)

Wenn du dann irgendwas dort hineinschreibst kriegt er (vielleicht) einen 
Interrupt und behandelt dann das was sich der Erschaffer des Treibers 
ausgedacht hat...

Autor: Bartli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Dieser möchte anscheinend durch '\n' separierte Oktalwerte
> (als String) haben.

So etwas macht auch sinn, weil das eben genau erlaubt, den Treiber aus 
einem Shellskript anzusteuern.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Joggl,

(fein gesagt: der treiber erzeugt ein node irgendwo in /sys und das
darüberliegende device-pogramm [devfs, udev] erzeugt dann die node in
/dev)

Mit sysfs hat das nichts zu tun. Entweder man erzeugt den Device Node 
selber oder man konfiguriert devfs oder udev so das sie den 
entsprechenden Device Node nach einem Hotplug Event (erzeugt durch den 
Kernel) anlegen.

Gruss,
Bernd

Autor: Bartli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mag mich täuschen, aber udev holt sich seine Infos über zu erstellende 
Devicenodes tatsächlich aus sysfs, und sysfs hat devfs mehr oder weniger 
abgelöst.

Haben wir auf Embeddedsystemen so gemacht:
* Treiber wird beim Bootvorgang geladen, trägt seine dynamisch 
angeforderten Device IDs im sysfs ein
* Am Ende des Bootvorgangs liessen wir mdev sysfs durchrasseln und 
Devicenodes erstellen. Hotplugevents haben wir nicht benutzt, da auf 
einem Gerät immer dieselben Treiber geladen werden mussten, welche war 
schon beim Booten klar. Aber wir mussten nicht selber statisch 
Devicenodes verteilen.

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bartli wrote:
>> Dieser möchte anscheinend durch '\n' separierte Oktalwerte
>> (als String) haben.
>
> So etwas macht auch sinn, weil das eben genau erlaubt, den Treiber aus
> einem Shellskript anzusteuern.

Obwohl es im Shellskript auch kein Problem wäre, direkt die Binärdaten 
zu erzeugen:
> echo -n -e '\xaa\x55\024\007' | hexdump -C
00000000  aa 55 14 07                                       |.U..|

Autor: Bartli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weiss ich, aber noch lange nicht jede echo-Implementation kann -e.

Autor: I_ H. (i_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
/proc/devices müsste die Quelle sein (bzw. die Quelle davon). Der 2.4er 
Kernel kannte noch garkein sysfs.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.