• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

TV-Karte+ Webcam - udev und v4l (device-Reihenfolge)?

grf

Newbie
Hallo,

ich habe ein Problem mit der Reihenfolge der Einbindung von Video-Devices während des Bootvorgangs. Eine Hauppauge bttv 878 und eine Logitech Webcam sind im Rechner verbaut bzw. per USB angeschlossen. Beide funktionieren an sich (wenn man die Webcam erst nach dem Bootvorgang anschließt). Die TV-Karte wird dann /dev/video0 und die Webcam /dev/video1.

Wenn auch die Webcam während des Bootvorganges angeschlossen ist, wird die Reihenfolge leider gedreht. Das führt dazu, dass kdetv hängt und auch v4l-conf eine Fehlermeldung (X Error of failed request: XF86DGANoDirectVideoMode) zurückgibt.

Nun habe ich versucht, dieses Problem mittels udev-rules zu lösen, wie hier (http://www.linux-club.de/viewtopic.php?f=46&t=102730&start=0) vorgeschlagen. Hier die Datei mit den Regeln:

Code:
# Hauppage TV card
SUBSYSTEM=="video4linux", ATTR{name}=="BT878 video (Hauppauge (bt878))", NAME="video0", SYMLINK="tvcard"

# Logitech Cam
SUBSYSTEM=="video4linux", ATTR{name}=="UVC Camera (046d:0991)", NAME="video1", SYMLINK="webcam"

Das funktioniert bezogen auf die devices unter /dev auch. Trotzdem funktionieren kdetv und v4l-conf nicht (dieselben Probleme).
Nun habe ich mal mit
Code:
udevinfo -a -p $(udevinfo -q path -n /dev/video0)
und
Code:
udevinfo -a -p $(udevinfo -q path -n /dev/video1)
geschaut, wie TV-Karte und Webcam eingebunden sind. Und siehe da, die device-Nummern sind nun irgendwie vermischt (Beispiel für /dev/video0):

  • looking at device '/devices/pci0000:00/0000:00:0a.0/video4linux/video1':
    KERNEL=="video1"
    SUBSYSTEM=="video4linux"
    DRIVER==""
    ATTR{name}=="BT878 video (Hauppauge (bt878))"
    ATTR{index}=="0"
    ATTR{card}=="10"

Für /dev/video1 gibt es folgende Ausgabe:

  • looking at device '/devices/pci0000:00/0000:00:02.3/usb2/2-3/2-3:1.0/video4linux/video0':
    KERNEL=="video0"
    SUBSYSTEM=="video4linux"
    DRIVER==""
    ATTR{name}=="UVC Camera (046d:0991)"
    ATTR{index}=="0"

Einige Programme wie luvcview und skype kommen trotzdem damit zurecht, kdetv aber leider nicht. Das hängt einfach nach dem Start, wahrscheinlich, weil v4l-conf nicht funktioniert.

Nun meine Frage: Gibt es eine Lösung für dieses Problem? Offensichtlich reicht es ja nicht, per udev-rules die device-Zuordnung zu ändern, da die ja noch an anderen Stellen (im Kernel?, im video4linux-Subsystem?, im HAL?) anders zu sein scheint...
 
grf schrieb:
Code:
# Hauppage TV card
SUBSYSTEM=="video4linux", ATTR{name}=="BT878 video (Hauppauge (bt878))", NAME="video0", SYMLINK="tvcard"

# Logitech Cam
SUBSYSTEM=="video4linux", ATTR{name}=="UVC Camera (046d:0991)", NAME="video1", SYMLINK="webcam"

[...]

Nun meine Frage: Gibt es eine Lösung für dieses Problem? Offensichtlich reicht es ja nicht, per udev-rules die device-Zuordnung zu ändern, da die ja noch an anderen Stellen (im Kernel?, im video4linux-Subsystem?, im HAL?) anders zu sein scheint...

Ich bin mit dem udev-Zeugs auch nicht so ganz fit, aber führen die o.g. SYMLINK Anweisungen nicht dazu dass es für die TV-Karte ein "/dev/tvcard" und für die Webcam ein "/dev/webcam" gibt? War das so gewünscht?

Ausserdem denke ich dass sich die Bezeichnungen '/devices/pci0000:00/0000:00:0a.0/video4linux/video1' und '/devices/pci0000:00/0000:00:02.3/usb2/2-3/2-3:1.0/video4linux/video0' sich auf die jeweiligen Anschluss-Nummern (sozusagen) der Geräte bezieht. Das steht nicht im Widerspruch zur Vergabe der "dev"-Adressen, oder doch?
 
OP
G

grf

Newbie
FordPrefect schrieb:
Ich bin mit dem udev-Zeugs auch nicht so ganz fit, aber führen die o.g. SYMLINK Anweisungen nicht dazu dass es für die TV-Karte ein "/dev/tvcard" und für die Webcam ein "/dev/webcam" gibt? War das so gewünscht?

Ja, auch. Das war aber nur ein Versuch, wirklich notwendig ist das nicht. Das ist dann zusätzlich zu video0 und video1 ein symbolischer Link.

FordPrefect schrieb:
Ausserdem denke ich dass sich die Bezeichnungen '/devices/pci0000:00/0000:00:0a.0/video4linux/video1' und '/devices/pci0000:00/0000:00:02.3/usb2/2-3/2-3:1.0/video4linux/video0' sich auf die jeweiligen Anschluss-Nummern (sozusagen) der Geräte bezieht. Das steht nicht im Widerspruch zur Vergabe der "dev"-Adressen, oder doch?

Da bin ich nicht sicher. v4l scheint damit ein Problem zu haben, kdetv auch. Die devices werden ja mit den udev-rules festgelegt und sind auch problemlos mit skype und luvcview ansprechbar, aber TV geht so leider nicht mehr. Und da ist meine Vermutung, dass einfach nur das Ändern der device-Zuordnung nicht ausreicht, weil auf einer anderen (früheren?) Ebene noch etwas falsch zugeordnet ist. Ich bin leider ratlos.
 
Hi,

es gibt da eine effektivere Lösung als mit udev zu werkeln.
Ich habe es zwar auch darüber versucht aber bei mir wurden die regeln nicht einmal angenommen unter OpenSUSE 11.1 64-bit.
Daher hab ich es wieder auf meine alte Methode umgestellt mit der bei jedem Start garantiert die TV-Karte als video0 angemeldet wird.

Vorgehensweise:

1. Öffne über eine Shell im Systemverwaltungsmodus Kwrite und suche die Datei after.local im Verzeichnis /etc/rc.d/
Falls die Datei after.local dort nicht vorhanden ist erstellst du sie mit folgendem inhalt:

modprobe xxx

exit 0

Anstelle von xxx schreibst Du den Namen Deines Webcam-Treibers.
Speicher die Datei dann ab.
Sollte die Datei schon vorhanden sein dann schreibst Du einfach nur den Befehl modprobe xxx for einen schon vorhandenen exit Befehl.
Wenn Du die Datei selbst erstellt hast weil sie nicht in dem Verzeichnis gewesen ist musst Du sie mit dem Befehl "chmod 744 /etc/rc.d/after.local" ausführbar machen.

Die Datei after.local wird beim Hochfahren des Systems kurz vor dem Login-Screen automatisch ausgeführt.

Jetzt musst Du noch die Datei blacklist im Ordner /etc/modprobe.d bearbeiten.

Lade diese Datei ins Kwrite-Fenster und füge ganz unten die folgenden Zeile ein:

blacklist xxx

Auch hier ersetzt du das xxx mit dem Namen deines Webcam-Treibers.
Nach dem speichern der blacklist und eines neustarts hast Du ab sofort die Tv-Karte als video0 und die Webcam als video1.
Damit kannst Du dir diese SYMLINK Geschichte sparen da es ja leider auch Programme gibt die sich nicht auf /tvcard oder /webcam umstellen lassen.

Gruß
Torsten
 
OP
G

grf

Newbie
Stimmt, das mit der Blacklist wäre eine Möglichkeit. Das werde ich mal ausprobieren...
 
Oben