DEVD: wie USB Sensor via devd einbinden?

Eisenfaust

Well-Known Member
Hallo,

seit einigen Stunden verzweifele ich an dem recht erfolglosen Versuch, einen DALLAS 1wire Sensor an einen FreeBSD 12-STABLE Host anzuschließen. Der DS Sensor selbst ist an einem TTL/UART Konverter des Typs CP2102 angeschlossen, der Treiber für diesen TTL-UART Typ, uslcom, ist eingebunden, FreeBSD erkennt diesen Chip bei Anschluß an den USB Bus auch problemlos. Die Daten liefere ich unten hernach.

Einmal angeschlossen, kann ich den Sensor auch problemlos mit owfs einbinden (comms/owfs, owfs-3.2p3_1): owfs -d /dev/ttyU0 -m /mnt/1wire klappt hervorragend - das Argument für -d orientiert sich am CDEV, auf welches der CP2102 angebunden wird.

Den Sensor kann ich mittels "usbconfig dump_all_desc" ob einiger seiner Parameter befragen:

ugen0.6: <Silicon Labs CP2102 USB to UART Bridge Controller> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (100mA)

bLength = 0x0012
bDescriptorType = 0x0001
bcdUSB = 0x0110
bDeviceClass = 0x0000 <Probed by interface class>
bDeviceSubClass = 0x0000
bDeviceProtocol = 0x0000
bMaxPacketSize0 = 0x0040
idVendor = 0x10c4
idProduct = 0xea60
bcdDevice = 0x0100
iManufacturer = 0x0001 <Silicon Labs>
iProduct = 0x0002 <CP2102 USB to UART Bridge Controller>
iSerialNumber = 0x0003 <0001>
bNumConfigurations = 0x0001
[...]


devd.conf ist wie folgt erweitert (Variante a) ):
Datei: /usr/local/etc/devd/1wire.conf

notify 100 {
match "system" "DEVFS";
match "subsystem" "CDEV";
match "type" "CREATE";
match "cdev" "ttyU[0-9]+$";
match "vendor" "0x10c4";
match "product" "0xea60";
action "/usr/local/bin/owfs -d /dev/$cdev -m /mnt/1wire";
};

notify 100 {
match "system" "DEVFS";
match "subsystem" "CDEV";
match "type" "CREATE";
match "cdev" "ttyU[0-9]+";
match "vendor" "0x10c4";
match "product" "0xea60";
action "umount -f /mnt/1wire";
};

Diese Variante funktioniert nicht.

Ich habe es auch mit folgender Variante b) versucht, die ebensowenig erfolgreich ist:

notify 100 {
match "system" "USB";
match "subsystem" "INTERFACE";
match "type" "ATTACH";
match "cdev" "ttyU[0-9]+$";
match "vendor" "0x10c4";
match "product" "0xea60";
action "/usr/local/bin/owfs -d /dev/$cdev -m /mnt/1wire";
};

Auch der Tausch des Ereigniss-Statements "notify" gegen "attach" ist fruchtlos.

Wenn ich devd mittels "devd -d" starte und mir die Debug-Informationen anschaue, dann scheint doch Variante a) plausibel:

[...]
Processing event '!system=DEVFS subsystem=CDEV type=CREATE cdev=ttyU0'
Pushing table
setting *=!system=DEVFS subsystem=CDEV type=CREATE cdev=ttyU0
setting _=system=DEVFS subsystem=CDEV type=CREATE cdev=ttyU0
setting timestamp=1572854042.899899
setting system=DEVFS
setting subsystem=CDEV
setting type=CREATE
setting cdev=ttyU0
Processing notify event
Testing system=DEVFS against ^DEVFS$, invert=0
Testing subsystem=CDEV against ^CDEV$, invert=0
Testing type=CREATE against ^CREATE$, invert=0
Testing cdev=ttyU0 against ^atp[0-9]+$, invert=0
Testing system=DEVFS against ^DEVFS$, invert=0
Testing subsystem=CDEV against ^CDEV$, invert=0
Testing type=CREATE against ^CREATE$, invert=0
Testing cdev=ttyU0 against ^ums[0-9]+$, invert=0
Testing system=DEVFS against ^DEVFS$, invert=0
Testing subsystem=CDEV against ^CDEV$, invert=0
Testing type=CREATE against ^CREATE$, invert=0
Testing cdev=ttyU0 against ^wsp[0-9]+$, invert=0
Testing system=DEVFS against ^DEVFS$, invert=0
Testing subsystem=CDEV against ^CDEV$, invert=0
Testing type=CREATE against ^DESTROY$, invert=0
Testing system=DEVFS against ^USB$, invert=0
Testing system=DEVFS against ^USB$, invert=0
Testing system=DEVFS against ^USB$, invert=0
Testing system=DEVFS against ^USB$, invert=0
Testing system=DEVFS against ^USB$, invert=0
Testing system=DEVFS against ^USB$, invert=0
Testing system=DEVFS against ^USB$, invert=0
Testing system=DEVFS against ^USB$, invert=0
Testing system=DEVFS against ^USB$, invert=0
Testing system=DEVFS against ^USB$, invert=0
Testing system=DEVFS against ^USB$, invert=0
Testing system=DEVFS against ^USB$, invert=0
Testing system=DEVFS against ^USB$, invert=0
Testing system=DEVFS against ^USB$, invert=0
Testing system=DEVFS against ^USB$, invert=0
Testing system=DEVFS against ^USB$, invert=0
Testing system=DEVFS against ^DEVFS$, invert=0
Testing subsystem=CDEV against ^CDEV$, invert=0
Testing type=CREATE against ^CREATE$, invert=0
Testing cdev=ttyU0 against ^ttyU[0-9]+$, invert=0
Testing vendor= against ^0x10c4$, invert=0
Testing system=DEVFS against ^DEVFS$, invert=0
Testing subsystem=CDEV against ^CDEV$, invert=0
Testing type=CREATE against ^CREATE$, invert=0
Testing cdev=ttyU0 against ^hv_fsvss_dev$, invert=0
Testing system=DEVFS against ^DEVFS$, invert=0
Testing subsystem=CDEV against ^CDEV$, invert=0
Testing type=CREATE against ^DESTROY$, invert=0
Testing system=DEVFS against ^ACPI$, invert=0
Testing system=DEVFS against ^ACPI$, invert=0
Testing system=DEVFS against ^ACPI$, invert=0
Testing system=DEVFS against ^ACPI$, invert=0
Testing system=DEVFS against ^DEVFS$, invert=0
Testing subsystem=CDEV against ^CDEV$, invert=0
Testing type=CREATE against ^CREATE$, invert=0
Testing cdev=ttyU0 against ^hv_kvp_dev$, invert=0
Testing system=DEVFS against ^DEVFS$, invert=0
Testing subsystem=CDEV against ^CDEV$, invert=0
Testing type=CREATE against ^DESTROY$, invert=0
Testing system=DEVFS against ^HYPERV_NIC_VF$, invert=0
Testing system=DEVFS against ^ETHERNET$, invert=0
Testing system=DEVFS against ^ZFS$, invert=0
Testing system=DEVFS against ^ZFS$, invert=0
Testing system=DEVFS against ^ZFS$, invert=0
Testing system=DEVFS against ^ZFS$, invert=0
Testing system=DEVFS against ^ZFS$, invert=0
Testing system=DEVFS against ^ZFS$, invert=0
Testing system=DEVFS against ^ZFS$, invert=0
Testing system=DEVFS against ^ZFS$, invert=0
Testing system=DEVFS against ^ZFS$, invert=0
Testing system=DEVFS against ^ZFS$, invert=0
Testing system=DEVFS against ^ZFS$, invert=0
Testing system=DEVFS against ^ZFS$, invert=0
Testing system=DEVFS against ^IFNET$, invert=0
Testing system=DEVFS against ^IFNET$, invert=0
Testing system=DEVFS against ^IFNET$, invert=0
Testing system=DEVFS against ^ACPI$, invert=0
Testing system=DEVFS against ^ACPI$, invert=0
Testing system=DEVFS against ^ACPI$, invert=0
Testing system=DEVFS against ^ACPI$, invert=0
Testing system=DEVFS against ^ACPI$, invert=0
Testing system=DEVFS against ^ACPI$, invert=0
Testing system=DEVFS against ^DEVFS$, invert=0
Testing subsystem=CDEV against ^CDEV$, invert=0
Testing type=CREATE against ^CREATE$, invert=0
Testing cdev=ttyU0 against ^ttyU[0-9]+$, invert=0
Testing vendor= against ^0x10c4$, invert=0
Popping table
Processing event '!system=DEVFS subsystem=CDEV type=CREATE cdev=ttyU0.init'
Pushing table
setting *=!system=DEVFS subsystem=CDEV type=CREATE cdev=ttyU0.init
setting _=system=DEVFS subsystem=CDEV type=CREATE cdev=ttyU0.init
setting timestamp=1572854042.900307
setting system=DEVFS
setting subsystem=CDEV
setting type=CREATE
setting cdev=ttyU0.init
Processing notify event
Testing system=DEVFS against ^DEVFS$, invert=0
[...]


Vielleicht hat jemand eine Idee, mir jedenfalls sind sie ausgegangen.

Danke im voraus.
 
Starte
Code:
sudo cat /var/run/devd.pipe
und sieh dir an was devd sieht, wenn du das Device einsteckst. Anschließend schreibe eine passende devd config mit hoher Priorität.
 
Starte
Code:
sudo cat /var/run/devd.pipe
und sieh dir an was devd sieht, wenn du das Device einsteckst. Anschließend schreibe eine passende devd config mit hoher Priorität.

So bin ich bereits zu Beginn vorgegangen, jedoch bleibt es dabei: egal was ich mache, meine "action" wird nicht ausgeführt, als ob das Muster nicht erkannt werden würde. Da ich sowohl "product" als auch "vendor" Identifikationen wie gesehen /ermittelt einsetze, schin das Skript nicht zur Auslösung zu kommen. Grund unklar :-(
 
Du scheinst reguläre Ausdrücke zu verwenden. Ich glaube das sind bloß Glob patterns.

Edit: Nevermind, es sind reguläre Ausdrücke.

Edit2: Ich habe mir das mal durchgelesen. Es sieht für mich aus als gäbe es kein Vendor match. Das ttyU0 scheint keinen Vendor zu haben. Die Information wird anscheinend nicht vom ugen geerbt.
 
Zurück
Oben