Help writing UDEV rules for FC6
Hi,
I'm having problems getting a UDEV rule to work under FC6. I have a PVR500 and have one of the two capture symlinks working, but not sure why the second isn't working correctly.. I'll include everything I've looked at to debug this. First the udev rules in /etc/udev/rules.d/10-local.rules # Local Rules DRIVER=="ivtv", SYSFS{name}=="ivtv? encoder MPEG", ID=="0000:06:08.0", SYMLINK+="pvr_500_1" DRIVER=="ivtv", SYSFS{name}=="ivtv? encoder MPEG", ID=="0000:06:09.0", SYMLINK+="pvr_500_2" DRIVER=="ivtv", SYSFS{name}=="ivtv? encoder PCM audio", ID=="0000:06:08.0", SYMLINK+="pvr_500_1_audio" DRIVER=="ivtv", SYSFS{name}=="ivtv? encoder PCM audio", ID=="0000:06:09.0", SYMLINK+="pvr_500_2_audio" output from ll /dev/pvr_500_* lrwxrwxrwx 1 root root 6 Feb 22 20:11 /dev/pvr_500_1 -> video1 lrwxrwxrwx 1 root root 7 Feb 22 20:11 /dev/pvr_500_1_audio -> video24 output of lspci 00:00.0 Memory controller: nVidia Corporation CK804 Memory Controller (rev a3) 00:01.0 ISA bridge: nVidia Corporation CK804 ISA Bridge (rev a3) 00:01.1 SMBus: nVidia Corporation CK804 SMBus (rev a2) 00:02.0 USB Controller: nVidia Corporation CK804 USB Controller (rev a2) 00:02.1 USB Controller: nVidia Corporation CK804 USB Controller (rev a3) 00:04.0 Multimedia audio controller: nVidia Corporation CK804 AC'97 Audio Controller (rev a2) 00:06.0 IDE interface: nVidia Corporation CK804 IDE (rev f2) 00:07.0 IDE interface: nVidia Corporation CK804 Serial ATA Controller (rev f3) 00:08.0 IDE interface: nVidia Corporation CK804 Serial ATA Controller (rev f3) 00:09.0 PCI bridge: nVidia Corporation CK804 PCI Bridge (rev a2) 00:0a.0 Bridge: nVidia Corporation CK804 Ethernet Controller (rev a3) 00:0b.0 PCI bridge: nVidia Corporation CK804 PCIE Bridge (rev a3) 00:0c.0 PCI bridge: nVidia Corporation CK804 PCIE Bridge (rev a3) 00:0d.0 PCI bridge: nVidia Corporation CK804 PCIE Bridge (rev a3) 00:0e.0 PCI bridge: nVidia Corporation CK804 PCIE Bridge (rev a3) 00:18.0 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration 00:18.1 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map 00:18.2 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller 00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control 01:00.0 VGA compatible controller: nVidia Corporation NV43 [GeForce 6600 GT] (rev a2) 05:06.0 PCI bridge: Hint Corp HB6 Universal PCI-PCI bridge (non-transparent mode) (rev 11) 05:08.0 Multimedia video controller: Conexant CX23880/1/2/3 PCI Video and Audio Decoder (rev 05) 05:08.2 Multimedia controller: Conexant CX23880/1/2/3 PCI Video and Audio Decoder [MPEG Port] (rev 05) 06:08.0 Multimedia video controller: Internext Compression Inc iTVC16 (CX23416) MPEG-2 Encoder (rev 01) 06:09.0 Multimedia video controller: Internext Compression Inc iTVC16 (CX23416) MPEG-2 Encoder (rev 01) output of devtest for video0-2 I also have a HD3000 card: udevtest /class/video4linux/video0 main: looking at device '/class/video4linux/video0' from subsystem 'video4linux' udev_rules_get_name: add symlink 'video' udev_rules_get_name: no node name set, will use kernel name 'video0' udev_device_event: device '/class/video4linux/video0' already in database, validate currently present symlinks udev_node_add: creating device node '/dev/video0', major = '81', minor = '0', mode = '0660', uid = '0', gid = '0' udev_node_add: creating symlink '/dev/video' to 'video0' main: run: 'socket:/org/kernel/udev/monitor' main: run: '/lib/udev/udev_run_devd' main: run: 'socket:/org/freedesktop/hal/udev_event' main: run: '/sbin/pam_console_apply /dev/video0 /dev/video' [root@Coruscant ~]# udevtest /class/video4linux/video1 main: looking at device '/class/video4linux/video1' from subsystem 'video4linux' udev_rules_get_name: add symlink 'pvr_500_1' udev_rules_get_name: no node name set, will use kernel name 'video1' udev_device_event: device '/class/video4linux/video1' already in database, validate currently present symlinks udev_node_add: creating device node '/dev/video1', major = '81', minor = '1', mode = '0660', uid = '0', gid = '0' udev_node_add: creating symlink '/dev/pvr_500_1' to 'video1' main: run: 'socket:/org/kernel/udev/monitor' main: run: '/lib/udev/udev_run_devd' main: run: 'socket:/org/freedesktop/hal/udev_event' main: run: '/sbin/pam_console_apply /dev/video1 /dev/pvr_500_1' [root@Coruscant ~]# udevtest /class/video4linux/video2 main: looking at device '/class/video4linux/video2' from subsystem 'video4linux' udev_rules_get_name: add symlink 'pvr_500_2' udev_rules_get_name: no node name set, will use kernel name 'video2' udev_db_get_device: no db file to read /dev/.udev/db/class@video4linux@video2: No such file or directory udev_node_add: creating device node '/dev/video2', major = '81', minor = '2', mode = '0660', uid = '0', gid = '0' udev_node_add: creating symlink '/dev/pvr_500_2' to 'video2' main: run: 'socket:/org/kernel/udev/monitor' main: run: '/lib/udev/udev_run_devd' main: run: 'socket:/org/freedesktop/hal/udev_event' main: run: '/sbin/pam_console_apply /dev/video2 /dev/pvr_500_2' The only thing I've noticed that is strange is the no db file to read message. Other than that I'm lost. Any help is greatly appriciated |
Still have no idea what I did wrong, however I did find more information:
I found the following command to get information about the ids while trying to figure out what is wrong. It still looks like what I have should work, but figured more information might help someone debug this. I originally thought that this thread would be fedora specific.. I'm less inclined to believe that now. If it is not can someone move it to the proper forum? udevinfo -a -p /class/video4linux/video0 Udevinfo starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/class/video4linux/video0': KERNEL=="video0" SUBSYSTEM=="video4linux" SYSFS{name}=="cx88_0_ video _pcHDTV HD3000 HD" SYSFS{dev}=="81:0" looking at parent device '/devices/pci0000:00/0000:00:09.0/0000:05:08.0': ID=="0000:05:08.0" BUS=="pci" DRIVER=="cx8800" SYSFS{msi_bus}=="" SYSFS{broken_parity_status}=="0" SYSFS{enable}=="1" SYSFS{modalias}=="pci:v000014F1d00008800sv00007063sd00003000bc04sc00i00" SYSFS{local_cpus}=="00000000,00000001" SYSFS{irq}=="18" SYSFS{class}=="0x040000" SYSFS{subsystem_device}=="0x3000" SYSFS{subsystem_vendor}=="0x7063" SYSFS{device}=="0x8800" SYSFS{vendor}=="0x14f1" looking at parent device '/devices/pci0000:00/0000:00:09.0': ID=="0000:00:09.0" BUS=="pci" DRIVER=="" SYSFS{msi_bus}=="1" SYSFS{broken_parity_status}=="0" SYSFS{enable}=="1" SYSFS{modalias}=="pci:v000010DEd0000005Csv00000000sd00000000bc06sc04i01" SYSFS{local_cpus}=="00000000,00000001" SYSFS{irq}=="0" SYSFS{class}=="0x060401" SYSFS{subsystem_device}=="0x0000" SYSFS{subsystem_vendor}=="0x0000" SYSFS{device}=="0x005c" SYSFS{vendor}=="0x10de" looking at parent device '/devices/pci0000:00': ID=="pci0000:00" BUS=="" DRIVER=="" udevinfo -a -p /class/video4linux/video1 Udevinfo starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/class/video4linux/video1': KERNEL=="video1" SUBSYSTEM=="video4linux" SYSFS{name}=="ivtv0 encoder MPEG" SYSFS{dev}=="81:1" looking at parent device '/devices/pci0000:00/0000:00:09.0/0000:05:06.0/0000:06:08.0': ID=="0000:06:08.0" BUS=="pci" DRIVER=="ivtv" SYSFS{msi_bus}=="" SYSFS{broken_parity_status}=="0" SYSFS{enable}=="1" SYSFS{modalias}=="pci:v00004444d00000016sv00000070sd0000E807bc04sc00i00" SYSFS{local_cpus}=="00000000,00000001" SYSFS{irq}=="16" SYSFS{class}=="0x040000" SYSFS{subsystem_device}=="0xe807" SYSFS{subsystem_vendor}=="0x0070" SYSFS{device}=="0x0016" SYSFS{vendor}=="0x4444" looking at parent device '/devices/pci0000:00/0000:00:09.0/0000:05:06.0': ID=="0000:05:06.0" BUS=="pci" DRIVER=="" SYSFS{msi_bus}=="1" SYSFS{broken_parity_status}=="0" SYSFS{enable}=="1" SYSFS{modalias}=="pci:v00003388d00000021sv00000000sd00000000bc06sc04i00" SYSFS{local_cpus}=="00000000,00000001" SYSFS{irq}=="0" SYSFS{class}=="0x060400" SYSFS{subsystem_device}=="0x0000" SYSFS{subsystem_vendor}=="0x0000" SYSFS{device}=="0x0021" SYSFS{vendor}=="0x3388" looking at parent device '/devices/pci0000:00/0000:00:09.0': ID=="0000:00:09.0" BUS=="pci" DRIVER=="" SYSFS{msi_bus}=="1" SYSFS{broken_parity_status}=="0" SYSFS{enable}=="1" SYSFS{modalias}=="pci:v000010DEd0000005Csv00000000sd00000000bc06sc04i01" SYSFS{local_cpus}=="00000000,00000001" SYSFS{irq}=="0" SYSFS{class}=="0x060401" SYSFS{subsystem_device}=="0x0000" SYSFS{subsystem_vendor}=="0x0000" SYSFS{device}=="0x005c" SYSFS{vendor}=="0x10de" looking at parent device '/devices/pci0000:00': ID=="pci0000:00" BUS=="" DRIVER=="" udevinfo -a -p /class/video4linux/video2 Udevinfo starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/class/video4linux/video2': KERNEL=="video2" SUBSYSTEM=="video4linux" SYSFS{name}=="ivtv1 encoder MPEG" SYSFS{dev}=="81:2" looking at parent device '/devices/pci0000:00/0000:00:09.0/0000:05:06.0/0000:06:09.0': ID=="0000:06:09.0" BUS=="pci" DRIVER=="ivtv" SYSFS{msi_bus}=="" SYSFS{broken_parity_status}=="0" SYSFS{enable}=="1" SYSFS{modalias}=="pci:v00004444d00000016sv00000070sd0000E817bc04sc00i00" SYSFS{local_cpus}=="00000000,00000001" SYSFS{irq}=="17" SYSFS{class}=="0x040000" SYSFS{subsystem_device}=="0xe817" SYSFS{subsystem_vendor}=="0x0070" SYSFS{device}=="0x0016" SYSFS{vendor}=="0x4444" looking at parent device '/devices/pci0000:00/0000:00:09.0/0000:05:06.0': ID=="0000:05:06.0" BUS=="pci" DRIVER=="" SYSFS{msi_bus}=="1" SYSFS{broken_parity_status}=="0" SYSFS{enable}=="1" SYSFS{modalias}=="pci:v00003388d00000021sv00000000sd00000000bc06sc04i00" SYSFS{local_cpus}=="00000000,00000001" SYSFS{irq}=="0" SYSFS{class}=="0x060400" SYSFS{subsystem_device}=="0x0000" SYSFS{subsystem_vendor}=="0x0000" SYSFS{device}=="0x0021" SYSFS{vendor}=="0x3388" looking at parent device '/devices/pci0000:00/0000:00:09.0': ID=="0000:00:09.0" BUS=="pci" DRIVER=="" SYSFS{msi_bus}=="1" SYSFS{broken_parity_status}=="0" SYSFS{enable}=="1" SYSFS{modalias}=="pci:v000010DEd0000005Csv00000000sd00000000bc06sc04i01" SYSFS{local_cpus}=="00000000,00000001" SYSFS{irq}=="0" SYSFS{class}=="0x060401" SYSFS{subsystem_device}=="0x0000" SYSFS{subsystem_vendor}=="0x0000" SYSFS{device}=="0x005c" SYSFS{vendor}=="0x10de" looking at parent device '/devices/pci0000:00': ID=="pci0000:00" BUS=="" DRIVER=="" |
Still finding things out slowly about udev. The only line that looks to be in error from above of the udevtest /class/video4linux/video2 is this:
udev_db_get_device: no db file to read /dev/.udev/db/class@video4linux@video2: No such file or directory when I go there I get the following listing: ls block@fd0 block@sdb@sdb4 class@input@mice class@sound@pcmC0D2p block@hda block@sdb@sdb5 class@misc@device-mapper class@sound@seq block@hdc class@cpuid@cpu0 class@msr@msr0 class@sound@timer block@ram0 class@dvb@dvb0.demux0 class@printer@lp0 class@usb_device@usbdev1.1 block@ram1 class@dvb@dvb0.dvr0 class@sound@controlC0 class@usb_device@usbdev2.1 block@sda class@dvb@dvb0.frontend0 class@sound@controlC1 class@video4linux@radio0 block@sda@sda1 class@dvb@dvb0.net0 class@sound@midi1 class@video4linux@vbi0 block@sdb class@input@input0@event0 class@sound@midiC1D0 class@video4linux@video0 block@sdb@sdb1 class@input@input1@event1 class@sound@pcmC0D0c class@video4linux@video1 block@sdb@sdb2 class@input@input1@mouse0 class@sound@pcmC0D0p class@video4linux@video24 block@sdb@sdb3 class@input@input2@event2 class@sound@pcmC0D1c The contents of class@video4linux@video0 N:video0 S:video M:81:0 The contents of class@video4linux@video1 N:video1 S:pvr_500_1 M:81:1 To me it looks like class@video4linux@video0 is the first capture card definition, and class@video4linux@video1 is the second, but when I use the id from lspci it links up the class@video4linux@video1 just fine, but thinks there should be a class@video4linux@video2 when there is no file like that created. Not sure what it all means, but thought I would share in hopes someone could answer. Thanks |
All times are GMT -5. The time now is 08:05 AM. |