Hallo! Ich programmiere gerade an einem embedded device unter linux. Wie man in einem Programm mittels udev ein USB device bedient habe ich schon erfolgreich umgesetzt und es gibt auch einige Beispiele dazu im Netz, die mir geholfen haben. Nun habe ich mir gedacht, dass man mit udev doch auch alle anderen devices unter /sys/class/... ansprechen können sollte. Außerdem kann mich ein udev device doch benachrichtigen, wenn an dem per udev_monitor_... etwas interessantes passiert. Da ich einen temperatursensor habe, der seine daten auf einen CAN bus übertragen soll, müsste ich doch irgendwie auf /sys/class/i2c-dev/i2c-0/subsystem/i2c-0/device/0-0048/temp1_input einen monitor setzen können und mein thread wird immer nur dann ausgeführt, wenn die Temperatur sich geändert hat. Grundsätzlich bin ich schon so weit, dass ich per printf(" I2C temp1_input %s\n", udev_device_get_sysattr_value(dev, "temp1_input")); den Wert des Sensors auslesen kann, aber ich bekomme den udev_monitor nicht hin. Leider finde ich auch keine halbwegs vollständigen und lesbaren Beispiele, die sich mit etwas anderem als USB beschäftigen. Hat da mal jemand was für mich? Vielen Dank schon mal Ulrich
sihe dir mal die lmsensors an http://lm-sensors.org/ Hier solltest du einigen Input finden wie dieses Sensoren normalerweis unter (embedded) Linux gnutzt werden. Ich bin fast sicher das man mit dieser Basis was für deine zwecke Adaptieren kann. btw. was spricht dagegen einen eigenen kleine Dämon zu schreiben der denn Sensor regelmäßig Pollt und sich dann schlafen legt, zumal Temperatur Änderungen doch eher ein langsame Prozesse sind.
Hi! Danke schon mal für den Verweis auf lm-sensors. Ich bin mir nicht sicher, ob ein kleiner Dämon für mein Problem wirklich geeignet ist. Der LM92 ist nur eine vorübergehende Lösung, er wird durch einen NTC abgelöst, der an einem ADC Eingang der CPU hängt. Auch der soll per sys/classs/... exportiert werden. Die UserApp greift dann wieder darauf zu. Das soll noch für andere Sensoren und Eingänge ebenfalls so gelöst werden. Dieser Versuch ist dafür gedacht das udev mal aus zu probieren. Das finale Ziel ist eigentlich, dass die Applikation die Werte aller verbundenen Sensoren in einem eigenen udev Bereich ablegt. Dabei stammen die Daten von internen und via TCP/IP oder CAN angebundenen Sensoren. Das würde eine homogene Behandlung aller Sensoren ermöglichen, wobei der CAN Master die zentrale Drehscheibe ist. Alles andere würde vermutlich dazu führen, dass alles separat und womöglich unterschiedlich gemacht wird. Das ist nach einiger Zeit nicht mehr zu pflegen. Gruß, Ulrich
Ok, für alled, die es interssiert: Anscheinend kann der aktuelle hwmon (Kernel 2.6.34) das udev-system noch nicht über sein Polling oder geänderte Werte eines I2C Sensors informieren. Das ist der Grund, warum man per udev einen Wert auslesen kann, dieser aber immer auf dem Stand bleibt, den er beim ersten Auslesen hatte. Das erklärt auch, warum ein gesetzter udev_monitor nicht getriggert wird. Gruß, Ulrich
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.