PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Udev Chaos // Rules für zwei Karten



Gargi
24.06.06, 00:02
Hallo! Ich habe heute Abend ein paar Stunden damit zugebracht, zwei TV Karten unter Linux "kontrolliert" zum Laufen zu bringen. Vorweg: Sie gehen, nur habe ich dabei ein Problem. Von Reboot zu Reboot kann es sein, dass sich die Devices verschieben und ich nie sicher sein kann, welche der beiden Karten auf
/dev/video0
und
/dev/video1
landen. Das Zauberwort ist hier UDEV. Ich habe allerdings bis jetzt es nicht auf die Reihe gebracht, in den Rules die beiden Karten ( Terratec Cinergy 250 und Hauppauge WinTV PVR 350) auf einen festen Platz zu mappen. Habe hierzu schon einiges versucht.
Vielleicht kann mir da jemand einen Tipp geben, wie die Rules genau aussehen müssen. Hier der Output der beiden Karten:

Cinergy:

looking at device '/class/video4linux/video1':
KERNEL=="video1"
SUBSYSTEM=="video4linux"
SYSFS{name}=="saa7133_0_ video _Terratec Cine"
SYSFS{dev}=="81:1"

looking at device '/devices/pci0000:00/0000:00:09.0/0000:01:07.0':
ID=="0000:01:07.0"
BUS=="pci"
DRIVER=="saa7134"
SYSFS{modalias}=="pci:v00001131d00007133sv0000153Bsd00001160bc04sc80 i00"
SYSFS{local_cpus}=="1"
SYSFS{irq}=="82"
SYSFS{class}=="0x048000"
SYSFS{subsystem_device}=="0x1160"
SYSFS{subsystem_vendor}=="0x153b"
SYSFS{device}=="0x7133"
SYSFS{vendor}=="0x1131"

looking at device '/devices/pci0000:00/0000:00:09.0':
ID=="0000:00:09.0"
BUS=="pci"
DRIVER==""
SYSFS{modalias}=="pci:v000010DEd0000005Csv00000000sd00000000bc06sc04 i01"
SYSFS{local_cpus}=="1"
SYSFS{irq}=="0"
SYSFS{class}=="0x060401"
SYSFS{subsystem_device}=="0x0000"
SYSFS{subsystem_vendor}=="0x0000"
SYSFS{device}=="0x005c"
SYSFS{vendor}=="0x10de"

looking at device '/devices/pci0000:00':
ID=="pci0000:00"
BUS==""
DRIVER==""

(die soll auf /dev/video0)

WinTV PVR:

looking at device '/class/video4linux/video0':
KERNEL=="video0"
SUBSYSTEM=="video4linux"
SYSFS{name}=="ivtv0 encoder MPEG"
SYSFS{dev}=="81:0"

looking at device '/devices/pci0000:00/0000:00:09.0/0000:01:08.0':
ID=="0000:01:08.0"
BUS=="pci"
DRIVER=="ivtv"
SYSFS{modalias}=="pci:v00004444d00000803sv00000070sd00004000bc04sc00 i00"
SYSFS{local_cpus}=="1"
SYSFS{irq}=="66"
SYSFS{class}=="0x040000"
SYSFS{subsystem_device}=="0x4000"
SYSFS{subsystem_vendor}=="0x0070"
SYSFS{device}=="0x0803"
SYSFS{vendor}=="0x4444"

looking at device '/devices/pci0000:00/0000:00:09.0':
ID=="0000:00:09.0"
BUS=="pci"
DRIVER==""
SYSFS{modalias}=="pci:v000010DEd0000005Csv00000000sd00000000bc06sc04 i01"
SYSFS{local_cpus}=="1"
SYSFS{irq}=="0"
SYSFS{class}=="0x060401"
SYSFS{subsystem_device}=="0x0000"
SYSFS{subsystem_vendor}=="0x0000"
SYSFS{device}=="0x005c"
SYSFS{vendor}=="0x10de"

looking at device '/devices/pci0000:00':
ID=="pci0000:00"
BUS==""
DRIVER==""

(die muss auf /dev/video1)

Mein System: Suse Linux 10.1 (retail).

Vielen Dank für jeden Tipp!

cu
Gargi

PS.: Im Netz finden sich allerdings immer nur vage Hinweise, die hinten und vorne nicht funzen und darauf schließen lassen, dass die Leute, die dort kommentierten auch nur in Bezug auf das udev Halbwissen besitzen. Einfach ist das nicht.

h4gb4rdc31in3
24.06.06, 11:50
SYSFS{name}=="saa7133_0_ video _Terratec Cine" KERNEL="%k" LINK="tv/video0"
SYSFS{name}=="ivtv0 encoder MPEG" KERNEL="%k" LINK="tv/video1"


so kannst du es mal versuchen, dann hast du sie immer unter /dev/tv/
bin mir aber nicht 100% sicher.

Gargi
24.06.06, 12:05
Hmmm.... ja gerade habe ich es mit


# 46-tvcards.rules
# Rules fur zwei TV Karten
KERNEL=="video0", SYSFS{name}=="saa7133_0_ video _Terratec Cine",SUBSYSTEM=="video4linux", NAME="%k", SYMLINK+="%k"
KERNEL=="video1", SYSFS{name}=="ivtv0 encoder MPEG", SUBSYSTEM=="video4linux", NAME="%k", SYMLINK+="%k"

versucht. ICh schau mir das jetzt mal mit


# 46-tvcards.rules
# Rules fur zwei TV Karten
SYSFS{name}=="saa7133_0_ video _Terratec Cine",SUBSYSTEM=="video4linux", SYMLINK="video0"
SYSFS{name}=="ivtv0 encoder MPEG", SUBSYSTEM=="video4linux", SYMLINK="video1"

Die Devices müssen nach /dev/video0 und dev/video1 damit der xdtv das auch erkennt.

cu
Gargi

Gargi
24.06.06, 12:22
obiges funzt auch net. Auch das hier wird konstant ignoriert:



# 46-tvcards.rules
# Rules fur zwei TV Karten
KERNEL=="video0", SYSFS{name}=="saa7133_0_ video _Terratec Cine", SUBSYSTEM=="video4linux", SYMLINK="video0"
KERNEL=="video1", SYSFS{name}=="ivtv0 encoder MPEG", SUBSYSTEM=="video4linux", SYMLINK="video1"

Gargi
24.06.06, 12:31
Auch das hier Fehlanzeige:



KERNEL=="%k", SYSFS{name}=="saa7133_0_ video _Terratec Cine", LINK="video0"
KERNEL=="%k", SYSFS{name}=="ivtv0 encoder MPEG", LINK="video1"


Ich habe ja eine eigene Rule VOR der 50er Standard Rule gelelegt. Also mit der Nummer 46. Muss die normal irgendwo noch festgelegt werden?

Allerdings steht hier
http://reactivated.net/writing_udev_rules.html
in der Hinsicht nix. Die meinen, dass alles was vor der 50 geladen wird auch die Rules in der Default Rule überschreibt.

Irgendwie scheine ich da was nicht wirklich zu kapieren.

cu
Gargi

Gargi
24.06.06, 13:15
Auch das hier Fehlanzeige:



# 46-tvcards.rules
# Rules fur zwei TV Karten
KERNEL=="video*", SYSFS{name}=="saa7133_0_ video _Terratec Cine", SYMLINK="video0"
KERNEL=="video*", SYSFS{name}=="ivtv0 encoder MPEG", SYMLINK="video1"


Die Zeile soll doch folgendes machen:
Der Kernel bindet das Device als irgendein Video0 oder video1 ein. Egal welches er findet, für eine spezielle Karte soll ein spezieller Symlink verwendet werden. Deswegen hier der Platzhalter video* im Kernel und dann später das Umbiegen mittels SYMLINK="xyz".

So muss das einfach funzen, anders kann ich mir das gar nicht mehr vorstellen. In der Standard UDEV Rule steht hier

KERNEL=="video0" SYMLINK+"video"

Das bedeutet ja nichts anderes, als dass die Karte, die vom Kernel als video0 erkannt wird auf das erste Symlink gelegt wird, also auf video0. Aber diese Zeile sollte ja durch die Präsenz von meiner 46-tvcard.rules ja ignoriert werden, da diese ja eher geladen wird. Aber wenn ich aus der Standard-Rule die Zeile auskommentiere, dann wird überhaupt kein udev-Link festgelegt, was darauf hindeutet, dass meine rule einfach ignoriert wird.

cu
Gargi

herbert58
26.02.07, 16:48
Auch das hier Fehlanzeige:



# 46-tvcards.rules
# Rules fur zwei TV Karten
KERNEL=="video*", SYSFS{name}=="saa7133_0_ video _Terratec Cine", SYMLINK="video0"
KERNEL=="video*", SYSFS{name}=="ivtv0 encoder MPEG", SYMLINK="video1"


Die Zeile soll doch folgendes machen:
Der Kernel bindet das Device als irgendein Video0 oder video1 ein. Egal welches er findet, für eine spezielle Karte soll ein spezieller Symlink verwendet werden. Deswegen hier der Platzhalter video* im Kernel und dann später das Umbiegen mittels SYMLINK="xyz".

So muss das einfach funzen, anders kann ich mir das gar nicht mehr vorstellen. In der Standard UDEV Rule steht hier

KERNEL=="video0" SYMLINK+"video"

Das bedeutet ja nichts anderes, als dass die Karte, die vom Kernel als video0 erkannt wird auf das erste Symlink gelegt wird, also auf video0. Aber diese Zeile sollte ja durch die Präsenz von meiner 46-tvcard.rules ja ignoriert werden, da diese ja eher geladen wird. Aber wenn ich aus der Standard-Rule die Zeile auskommentiere, dann wird überhaupt kein udev-Link festgelegt, was darauf hindeutet, dass meine rule einfach ignoriert wird.

cu
Gargi

Ich habe mich auch ewig mit dem gleichen Problem herumgeärgert.
Es ging sogar, daß ich /dev/video0 und /dev/video1 mit den udev.rules richtig hinbekommen habe aber im kernel war dann /dev/video0 manchmal video1 und dann ging es auch nicht. also die pvr350 nicht automatisch einbinden lassen.

Die Datei für die pvr-Karte
/etc/sysconfig/hardware/hwcfg-bus-pci-0000:00:09.0 (kann bei dir etwas anders heißen)
editieren

orginal:
# YaST configured TV card
# RE4e.imWknO0JzYD:Benutzerdefinierte TV-Karte
MODULE='ivtv'
STARTMODE='auto'

geändert:
# YaST configured TV card
# RE4e.imWknO0JzYD:Benutzerdefinierte TV-Karte
MODULE='ivtv'
STARTMODE='manual'

dann in die /etc/init.d/boot.local folgenden Eintag machen:
hwup video1 /etc/sysconfig/hardware/hwcfg-bus-pci-0000:00:09.0

Gleiche Datei wie oben, kann bei dir wie gesagt etwas anders sein z.B. nicht hwcfg-bus-pci-0000:00:09.0
sondern vieleicht hwcfg-bus-pci-0000:00:06.0 oder so.

Ich glaube aber es ist die hwcfg-bus-pci-0000:00:09.0

Seitdem wird die (bei mir) die wintv PCI richtig (weil automatisch) als video0 eingebunden. Am Schluss des bootvorganges wird dann die /etc/init.d/boot.local ausgeführt und die pvr350 als video1 installiert.

herbert58
05.03.07, 07:14
Ja also bei mir klappt das so, aber hat vieleicht doch noch jemand eine Lösung direckt über die udev-rules?
Wäre über Hinweise sehr dankbar

undefined
06.03.07, 17:27
Das brauchst du doch gar nicht.


KERNEL=="saa7134*", NAME="%k", GROUP="video"
KERNEL=="video0", SYMLINK+="video"
KERNEL=="radio0", SYMLINK+="radio"
KERNEL=="vbi0", SYMLINK+="vbi"

Mit %n kannst du die Subdevices erstellen.