udev-Regel für DVB-Karte gesucht

  • Hallo zusammen,


    ich möchte meinen beiden DVB-Karten eine feste Device-Nummer vorgeben. Dazu habe ich die nachfolgenden udev-Regeln erstellt und in der Datei [/etc/udev/rules.d/ z30-dvb.rules] abgelegt.

    Code
    1. #Hauppauge NEXUS-s rev. 2.1
    2. SUBSYSTEMS=="pci", ATTRS{vendor}=="0x1131", ATTRS{device}=="0x7146", ATTRS{subsystem_vendor}=="0x13c2", ATTRS{subsystem_device}=="0x0003", NAME:="dvb/adapter0/$env{DVB_DEVICE_TYPE}$env{DVB_DEVICE_NUM}", GROUP="video"
    3. #Hauppauge NOVA-S Plus
    4. SUBSYSTEMS=="pci", ATTRS{vendor}=="0x1131", ATTRS{device}=="0x7146", ATTRS{subsystem_vendor}=="0x1894", ATTRS{subsystem_device}=="0x0014", NAME:="dvb/adapter1/$env{DVB_DEVICE_TYPE}$env{DVB_DEVICE_NUM}", GROUP="video"


    Das Script showdvb.sh von helau liefert bei mir folgenden Output:


    Keine_Ahnung : habe mal die udev-Kommandos ausgeführt.


    udevinfo --query=all --attribute-walk --name=/dev/dvb/adapter1/frontend0 liefert:



    udevtest /sys/bus/pci/devices/0000\:01\:0b.0/dvb\:dvb1.frontend0/ liefert:



    Ich habe meine Rules-Datei geändert und dann udevtest neu ausgeführt (ohne Rechnerneustart, wie's aussieht lädt udevtest die Regeln jedesmal neu), die Ausgabe
    [udev_rules_get_name rule applied, 'dvb1.frontend0' becomes 'dvb/adapter1/frontend0']
    bleibt gleich.


    Hat jemand 'ne Idee, wie die udev-Regel ausshen muss?


    Grüße,
    Klaus

    yaVDR 0.6.1 - Lenovo ThinkCentre A58 - Intel Pentium E5200 - 2 GByte RAM - 2TByte Disk - Gigabyte Geforce GT 630 - L4M-Twin S2 ver. 6.5 DUAL PCIe

  • Hm, UDEV nervt ;)


    Mir scheint dein UDEV ist zu alt für diese Regel. Und kannst du udevtest etwas gesprächiger gestalten? "udevadm test" gibt bei mir wesendlich mehr aus.


    cu

  • Hallo Keine_Ahnung,


    udevadmin gibt es bei mir nicht. Habe Deinen Befehl in bester Guttenberg-Manier in Putty eingefügt und ausgeführt, der Befehl wurde nicht gefunden (sollte doch im Suchpfad liegen, oder nicht?)


    Gruß und Dank,
    Klaus

    yaVDR 0.6.1 - Lenovo ThinkCentre A58 - Intel Pentium E5200 - 2 GByte RAM - 2TByte Disk - Gigabyte Geforce GT 630 - L4M-Twin S2 ver. 6.5 DUAL PCIe

  • udevadmin gibt es bei mir nicht.


    Jup, du hast da offenbar noch eine etwas ältere Linux Distribution.


    Aber evtl, bekommst du udevtest noch etwas Auskunfsfreudiger. Mach man "man udevtest"


    Bei mir erhalte ich da noch sowas

    Code
    1. udev_rules_apply_to_event: GROUP 44 /etc/udev/rules.d/30-dvb.rules:18
    2. udev_rules_apply_to_event: NAME 'dvb/adapter1/frontend0' /etc/udev/rules.d/30-dvb.rules:18
    3. udev_rules_apply_to_event: LINK 'char/212:3' /lib/udev/rules.d/50-udev-default.rules:2
    4. udev_rules_apply_to_event: RUN 'udev-acl --action=$env{ACTION} --device=$env{DEVNAME}' /lib/udev/rules.d/70-acl.rules:82
    5. udev_rules_apply_to_event: RUN 'socket:@/org/freedesktop/hal/udev_event' /lib/udev/rules.d/90-hal.rules:2
    6. udev_rules_apply_to_event: GROUP 44 /lib/udev/rules.d/91-permissions.rules:57


    Damit kann man dan etwas mehr anfangen.



    Das Problem bei deiner Regel wird sein das sowas nicht geht
    ---
    NAME:="dvb/adapter0/$env{DVB_DEVICE_TYPE}$env{DVB_DEVICE_NUM}"
    ---
    Bei dir (kernel < 2.6.29) wird nur sowas funktionieren
    ---
    PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter0/%%s $${K%%%%.*} $${K#*.}",NAME:="$result"
    ---
    (Wobei ich hier nicht kapiere warum da printf funktioniert, habs nur so aus der /lib/udev/rules.d/50-udev-default.rules von Debian stable rauskopiert)


    cu

  • Keine_Ahnung :

    Quote

    Aber evtl, bekommst du udevtest noch etwas Auskunfsfreudiger. Mach man "man udevtest"

    Leider Nein, udevtest kennt nur den Parameter Pfad X(.


    Habe die Änderung wie folgt eingebaut:

    Code
    1. #Hauppauge NEXUS-s rev. 2.1
    2. SUBSYSTEMS=="pci", ATTRS{vendor}=="0x1131", ATTRS{device}=="0x7146", ATTRS{subsystem_vendor}=="0x13c2", ATTRS{subsystem_device}=="0x0003", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter0/%%s $${K%%%%.*} $${K#*.}", NAME:="$result", GROUP="video"
    3. #Hauppauge NOVA-S Plus
    4. SUBSYSTEMS=="pci", ATTRS{vendor}=="0x1131", ATTRS{device}=="0x7146", ATTRS{subsystem_vendor}=="0x1894", ATTRS{subsystem_device}=="0x0014", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter1/%%s $${K%%%%.*} $${K#*.}", NAME:="$result", GROUP="video"


    Dabei wird - unabhängig von der Ziffer in "/adapter0/" - von udevtest folgender Output generiert:


    In Zeile 24 vom Output (udev_device_event: device '/class/dvb/dvb1.frontend0' already in database, validate currently present symlinks) steht etwas von "ist schon in der Datenbank, nehme das alte". Ist das vielleicht ein Hinweis darauf, dass die Reihenfolge der Rules-Dateien noch nicht passt?


    Grüße,
    Klaus

    yaVDR 0.6.1 - Lenovo ThinkCentre A58 - Intel Pentium E5200 - 2 GByte RAM - 2TByte Disk - Gigabyte Geforce GT 630 - L4M-Twin S2 ver. 6.5 DUAL PCIe

  • Code
    1. In Zeile 24 vom Output (udev_device_event: device
    2. '/class/dvb/dvb1.frontend0' already in database, validate currently
    3. present symlinks) steht etwas von "ist schon in der Datenbank, nehme das
    4. alte". Ist das vielleicht ein Hinweis darauf, dass die Reihenfolge der
    5. Rules-Dateien noch nicht passt?


    Jups, das wars. in udev.rules stand folgender Eintrag:

    Code
    1. KERNEL=="dvb*", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter%%i/%%s $${K%%%%.*} $${K#*.}", ACTION=="add", NAME="%c"



    Den habe ich auskommentiert und erhalte jetzt folgende Ausgaben
    mit erst adapter0 und dann adapter1

    Code
    1. main: looking at device '/class/dvb/dvb1.frontend0' from subsystem 'dvb'
    2. run_program: '/bin/sh -c 'K=dvb1.frontend0; K=${K#dvb}; printf dvb/adapter0/%s ${K%%.*} ${K#*.}'
    3. run_program: '/bin/sh' (stdout) 'dvb/adapter0/1dvb/adapter0/frontend0'
    4. run_program: '/bin/sh' returned with status 0
    5. udev_rules_get_name: rule applied, 'dvb1.frontend0' becomes 'dvb/adapter0/1dvb/adapter0/frontend0'
    6. udev_db_get_device: found a symlink as db file
    7. udev_device_event: device '/class/dvb/dvb1.frontend0' already in database, validate currently present symlinks
    8. udev_node_add: creating device node '/dev/dvb/adapter0/1dvb/adapter0/frontend0', major = '212', minor = '67', mode = '0660', uid = '0', gid = '44'
    9. main: run: 'socket:/org/kernel/udev/monitor'


    mit erst adapter1 und dann adapter0

    Code
    1. main: looking at device '/class/dvb/dvb1.frontend0' from subsystem 'dvb'
    2. run_program: '/bin/sh -c 'K=dvb1.frontend0; K=${K#dvb}; printf dvb/adapter1/%s ${K%%.*} ${K#*.}'
    3. run_program: '/bin/sh' (stdout) 'dvb/adapter1/1dvb/adapter1/frontend0'
    4. run_program: '/bin/sh' returned with status 0
    5. udev_rules_get_name: rule applied, 'dvb1.frontend0' becomes 'dvb/adapter1/1dvb/adapter1/frontend0'
    6. udev_db_get_device: found a symlink as db file
    7. udev_device_event: device '/class/dvb/dvb1.frontend0' already in database, validate currently present symlinks
    8. udev_node_add: creating device node '/dev/dvb/adapter1/1dvb/adapter1/frontend0', major = '212', minor = '67', mode = '0660', uid = '0', gid = '44'
    9. main: run: 'socket:/org/kernel/udev/monitor'


    sieht doch gut aus!!!


    Kann den Erfolg jetzt nicht testen, der VDR hat gerade wichtigeres zu tun als ständig rauf und runter zu fahren oder Testaufnahmen zu machen ;D. Ich werde das wohl morgen Nachmittag ausprobieren können (wenn ich heute noch mit der lästigen Buchführung zum Jahreswechsel durchkomme)


    Erst mal vielen Dank so weit,
    Klaus

    yaVDR 0.6.1 - Lenovo ThinkCentre A58 - Intel Pentium E5200 - 2 GByte RAM - 2TByte Disk - Gigabyte Geforce GT 630 - L4M-Twin S2 ver. 6.5 DUAL PCIe

    The post was edited 1 time, last by guckinsland ().


  • Jups, das wars. in udev.rules stand folgender Eintrag:


    Wobei ich mich Frage wo die eigentlich herkommt? Aus irgendeinem Paket kann die eigentlich nicht kommen.


    Ferner sollte der Doppelpunkt vor dem Gleicheitszeichen dafür sorgen das auf alle Fälle dieser Name genommen wird. Aber wer weiss schon was UDEV da so macht? ;) UDEV verhält sich da teilweise wirklich seltsam.


    Auf der sicheren Seite bist du wenn deine eigenen Regeln im Alphabet ganz vorne kommen so das sie als erstes aufgeführt werden, ein ":=" sorgt dann dafür (sollte es jedenfalls, keine Ahnung ob das bei deiner Version schon eingabut ist) das diese Zuweisung später nicht mehr überschrieben wird.


    cu

  • Hallo zusammen,


    habe jetzt die udev-Rules getestet. Wenn die neuen Regeln aktiv sind, werden kurz vor dem VDR-Start folgende Meldungen ausgegeben:


    Offenbar funktioniert die Rule für die FF-Karte [Technotrend/Hauppauge WinTV Nexus-S rev2.X], nicht aber für die Budget-Karte [KNC TV STAR DVB-S].


    Die Meldungen wiederholen sich dann in einer Endlosschleife, und der VDR muss mit deaktivierten (eigenen) Rules via Putty neu gestartet werden.


    Hat jemand 'ne Idee, was da schief läuft?


    Grüße,
    Klaus

    yaVDR 0.6.1 - Lenovo ThinkCentre A58 - Intel Pentium E5200 - 2 GByte RAM - 2TByte Disk - Gigabyte Geforce GT 630 - L4M-Twin S2 ver. 6.5 DUAL PCIe

  • Ohne dich demotivieren zu wollen: Aktuelle VDR-Versionen schließen von der /dev/dvbX Nummer zurück auf den Pfad unter /sys/class/dvb/dvbX, und den kannst du nicht zusammen mit der udev-Regel ändern...


    Gruß,


    Udo

  • Moin!


    Schau mal in die module-Parameter, die meisten Treiber haben einen, mit dem du die Adapternummer vorgeben kannst (adapter_nr).
    Mit halbwegs aktuellen udev-Versionen ist es nicht mehr vorgesehen, den Namen eines Devices umzubenennen. In irgendeinem changelog von udev hab ich da mal was gelesen, finde es aber auf die Schnelle nicht.


    Lars.

  • Hallo zusammen,


    erst mal Dank an alle, die mich hier begleiten!


    Bin jetzt ca. 150 Autobahnkilometer vom VDR entfernt und habe keine Fernsteuerung vorgesehen. Komme voraussichtlich das über-übernächste Wochenende in meine Wohnung zurück und kann daher frühestens dann was ausprobieren.


    mini73 : ich betreibe jatzt seit bald 10 Jahren den VDR, aber nur deshalb, weil die c't das so einfach gemacht hat (CD einlegen, booten, n-mal Ja oder OK, VDR tut's) ich habe Keine Ahnung wo ich modul-Parameter finde, wo ich die beeinflussen kann, oder was da hinein muss. Wenn ich da nicht begleitet werde, wird das mit mir wohl nicht funktionieren.


    Urig : ich habe schon darüber nachgedacht, den aktuellen c't-VDR 7 zu installieren könnte das helfen?


    Abgesehen davon bleibt noch die Möglichkeit einen hübschen Barebone zu kaufen, auszustatten und den mit 2-3 Budgetkarten zu betreiben. Dazu habe ich aber frühestens im nächsten Winter Gelegenheit :wand.


    Soweit von mir, Gruß an Alle,
    Klaus

    yaVDR 0.6.1 - Lenovo ThinkCentre A58 - Intel Pentium E5200 - 2 GByte RAM - 2TByte Disk - Gigabyte Geforce GT 630 - L4M-Twin S2 ver. 6.5 DUAL PCIe

  • Moin!


    mini73 : ich betreibe jatzt seit bald 10 Jahren den VDR, aber nur deshalb, weil die c't das so einfach gemacht hat (CD einlegen, booten, n-mal Ja oder OK, VDR tut's) ich habe Keine Ahnung wo ich modul-Parameter finde, wo ich die beeinflussen kann, oder was da hinein muss. Wenn ich da nicht begleitet werde, wird das mit mir wohl nicht funktionieren.


    Dann suche ich das bei Gelegenheit raus, hab ja zwei Wochen Zeit... :-)
    Weißt du denn, welchen Treiber du genau verwendest?


    Alternativ könnte auch ein Tauschen der Slots der beiden Karten helfen, weil sie dann in einer anderen Reihenfolge initialisiert werden... Aber das ist selbst mit Remote-Zugriff schwer zu machen... :-)


    Lars.