Forum: PC-Programmierung Suche Hilfestellung bei OpenWRT


von Hans M. (Gast)


Lesenswert?

Hallo zusammen,
Da der Betreff etwas allgemein ist, muss ich bei der Fragestellung etwas 
weiter ausholen:
Es geht um ein Gerät, welches per USB an ein OWRT Gerät angeschlossen 
ist.
Dieses stellt einen VCP und einen MSD zur Verfügung. Habe OWRT 
mittlerweile soweit, das der MSD als SDA1 gemounted werden kann und der 
VCP spricht über ACM mit mir.
Damit sind die grundsätzlichen Sachen schon mal geschafft.
Jetzt möchte ich 2 Progamme schreiben, eins als deamon und das andere 
als normales.
Der deamon soll einfach nur prüfen, ob das Gerät angeschlossen ist und 
wenn ja, das 2. starten oder halt beenden wenn abgesteckt.
Das 2te soll dann wenn gestartet, mit einem Webserver kommunizieren, 
aufs Dateisystem ( von Gerät ) zugreifen und mit ttyACM0 sprechen.
Ihr seht, es gibt viel zu tun ;)

Außerhalb von Linux/OWRT alles kein Problem für mich, aber hier bin ich 
etwas überfordert.

Was brauch ich dafür und was muss ich tun um das umzusetzen?
Die OWRT-Wikis hab ich mir angeschaut und soweit auch verstanden, aber 
mir tun sich da Fragen wie :
Was muss ich includieren für fopen,fclose....?
Wie Krieg ich die seriellen Daten von ttyACM?

Ich hoffe ihr versteht ungefähr was ich meine.

Weihnachtliche Grüße
Hans

von LOL (Gast)


Lesenswert?

Hoi,

die Aufgabenstellung ist ja nun trotz 2er Threads ( 
Beitrag "Unter Linux/Openwrt Treiber für andere VID/PID" ) nicht wirklich konkret, 
insbesondere ist unklar, was du auf dem Gerät eigentlich machen willst, 
aber:

1.)
Den Daemon kannst du dir sparen. Da gibt es auch in OpenWRT 
hotplug/mdev/udev & Co. dazu, die auf "neues Gerät eingesteckt" 
Ereignisse reagieren.
Sprich, durch entsprechende Konfiguration und evt. ein kleines Script 
zum Start deines Programms/mounten des Dateisystems kannst du dir den 
Aufwand schenken.

2.)
Mit /dev/ttyACM* kannst du im einfachsten Fall via Shellscript 
kommunizieren, "echo bla > /dev/ttyACMx".
Falls das ein Modem oder sowas sein sollte, gibt's dann chatscript oder 
expect-script für sowas.
Du kannst natürlich auch das Gerät wie eine Datei öffnen und rein 
schreiben/lesen, das ist dann aber ne ganz neue Stufe Aufwand.

von LOL (Gast)


Lesenswert?

Noch ein paar Links zum Thema:

1.) OpenWRT verwendet im Normalfall "hotplug2":
http://wiki.openwrt.org/doc/techref/hotplug

Das kann man mit /bin/sh-Scripten anpassen, Beispiele siehe Seite.
Das mounten macht man am besten via einer eindeutigen Device- oder UUID, 
da es dann automatisch geht. Innerhalb von eigenen Hotplug-Scripten ist 
das eher ein schlechter Hack, da die mount-Infrastruktur schon vorhanden 
ist und auch genutzt werden sollte.

2.) Man kann fast jedem Kernelmodul zur Laufzeit eine neue, nicht in der 
modulinternen Liste vorhandene Device/Vendor-ID unterschieben:

http://www.ha19.no/usb/

... was deinen anderen Thread beantworten dürfte.

HTH

von tmomas (Gast)


Lesenswert?

Hans M. schrieb:
> Der deamon soll einfach nur prüfen, ob das Gerät angeschlossen ist und
> wenn ja, das 2. starten oder halt beenden wenn abgesteckt.

Prüfen ob ttyACM0 verfügbar ist:

if [ -c /dev/ttyACM0 ]; then
  echo "Ist da!"
  <deinebefehlenachwahl>
fi

von Hans M. (Gast)


Lesenswert?

Danke für die Antworten!

@ LOL (Gast):
Habe die Threads bewusst getrennt!
Im ersten ging es um das verfügbar machen von Ressourcen ( VCP und MSD ) 
in/für OWRT.

Im zweiten ( diesem ) geht es nun um die Benutzung.
Womit
>2.) Man kann fast jedem Kernelmodul zur Laufzeit eine neue, nicht in der
>modulinternen Liste vorhandene Device/Vendor-ID unterschieben:
>
>http://www.ha19.no/usb/
>
>... was deinen anderen Thread beantworten dürfte.

im anderen Thread besser aufgehoben wäre ;-)

>This procedure does not work with 'usbserial', the generic driver.
Schau ich mir auch mal an, denn der Treiber, wär aus meiner Sicht besser 
geeignet als der ACM.

Die Sachen mit hotplug und udev werd ich mir gleich ansehen.

Es ist kein Modem, aber der ACM treiber hat sich automatisch geladen.
Es ist ein virtueller ComPort über den ich mit einem HexProtokoll ( 
liegt mir vor ) mit dem Gerät kommunizieren kann: GeräteID auslesen, 
Parameter lesen/schreiben, etc...
Und über das mass storage device ( sda1 ) wird auf die im Gerät 
steckende SD-Karte ( fat16/32 ) zugegrifffen. Da liegen n paar Config- 
und Logfiles drauf und auf deren Inhalt möchte ich zugreifen und die 
Daten an einen Webserver senden.

Ich hoffe einige Unklarheiten erklärt zu haben.

MfG Hans

von Hans M. (Gast)


Lesenswert?

Huhu,
hab mir jetzt ein Image gebastelt, das soweit alles hat was ich brauch.
Also USB-Storage, Fat und USB-Serial. Soweit danke für die Tips.
Jetzt geht's ums benutzen, SDA1 und ttyUSB sind vorhanden und LUCI ( 
uHTTPd mit LUA_Interpreter) läuft auch.
Hab überlegt, vllt gehts auch mit ner scriptsprache?! Spart 
Cross-Compiler und IDE und und und.
Zu erst dachte ich an Python, aber das wird zu groß. dann bin ich über 
LUA gestolpert ( ist schon installiert wegen LUCI )!

Könnt ich mein Vorhaben auch mit LUA umsetzen? Wenn ja, gibt's gleich 
Folgefragen ;) :
Wie kann ich mit LUA auf Dateien, ttyUSB und HTTP zugreifen?
Entschuldigt meine Unbeholfenen Schritte/Fragen, komme eigentlich aus 
der PC und uC Welt. Lese grad ein LUA-Tut, sieht noch so schlimm aus. 
Nur die Verbindung zur "Außenwelt" bereitet mir Kopfzerbrechen!
Werd die Tage mal ein LUA-LED-Blink Versuch starten ;)

LG Hans

von Hans Ulli K. (Gast)


Lesenswert?

Wie sieht es denn aus mit einem Shellscript
1
#!/bin/sh
2
file="/dev/ttyACM0"
3
4
while true; do
5
    if [ -f "$file" ]; then
6
        echo "file found"
7
    fi
8
    sleep 1
9
done

von Hans M. (Gast)


Lesenswert?

Hi Ulli,
Ja an die Shell hab ich auch schon gedacht, aber damit würde ich nicht 
alle meine Wünsche abdecken können. Glaub ich zumindest ;)
Aktuell hab ich mir jetzt ein Image gebaut, das soweit alles enthält ( 
LUCI, USB-Sorage/Serial, fat filesystem, nixio, luasocket lib und LUA 
mysql )
Damit lässt sich schon recht komfortabel arbeiten: in Windows lua 
schreiben, per scp aufs Gerät und über Terminal testen.
Jetzt hab ich fix meine Anforderungen zusammen geschrieben ( sind nur 15 
Punkte ) und sammle Infos zusammen, Lib-Referenzen und Codebeispiele.
Also rechnet in nächster Zeit mit vielen Fragen zu LUA :-P

Bis hier her danke für die Antworten.

Hans

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
Noch kein Account? Hier anmelden.