posted Nov 9, 2008, 3:46 PM by Tom Gutwin
Every time I was re-booting my video devices changed numbers. Not such a big deal unless you run mythtv and Zoneminder on a dedicatred video box with 8 video inputs from various cards. Zoneminder and mythtv kept getting misdirected on every re-boot. It wasn't often so I lived with it for a while.
v4ldev_namer script#!/bin/bash # http://www.mythtv.org/pipermail/mythtv-users/2006-November/157481.html # video device namer app called from the udev rules in /etc/udev/rules.d # Use udevinfo -a -p /class/video4linux/videoN replace N with the vid number you want info on
# this script requires 1 passed string that specifies the base link name to use
files=`ls -1 /dev/${1}* 2>/dev/null` for i in $files do devnbr=${i##/dev/${1}} done if [ -z $devnbr ]; then devnbr=0 else devnbr=$((devnbr+1)) fi
echo ${1}${devnbr}
I finally had enough and fixed it by writing some udev rules for the video devices. I used the following email ( http://www.mythtv.org/pipermail/mythtv-users/2006-November/157481.html ) as a guide.
It uses a small script (see the right text box) that figures out the varying number to append to the device and the actual udev rules in the /etc/udev/rules.d directory to recognize my different cards and link them to a static name that never changes after a re-boot. I have 4 video cards - Hauppauge pvr-350 (1 input mpg encoding input port and 1 mpg decoder output port),
- Hauppauge HVR-1800 (2 ports),
- BTTV based 4-port video input card,
- and a USB hauppauge HVR-950 (1 input)
So there is lots of devices that show up! There were a couple of important things to get right for this all to work correctly. - identifying the devices correctly and getting that into the udev rules
- numbering the udev rules correctly so they get run in a consistant order.
Getting the udev device details use the command: #udevinfo -a -p /class/video4linux/videoN replace N with the vid number you want info on This gives you all the details to use in the udev rules to specifically recognize the individual cards. Once the cards are recognized by the rule, the rule calls the script in the box above to create the symblic link. Here are my 4 udev rules I added to my /etc/udev/rules.d directory. Note the filename numbering... They are run in sequential order.
30-ivtv.rulesKERNEL=="video?", ATTR{name}=="ivtv? encoder MPG", ATTRS{vendor}=="0x4444", PROGRAM="/usr/local/bin/v4ldev_namer ivtv", SYMLINK+="%c" KERNEL=="video??", ATTR{name}=="ivtv? encoder YUV", ATTRS{vendor}=="0x4444", PROGRAM="/usr/local/bin/v4ldev_namer ivtvEncYUV", SYMLINK+="%c" KERNEL=="video??", ATTR{name}=="ivtv? decoder MPG", ATTRS{vendor}=="0x4444", PROGRAM="/usr/local/bin/v4ldev_namer ivtvDec", SYMLINK+="%c" KERNEL=="video??", ATTR{name}=="ivtv? decoder YUV", ATTRS{vendor}=="0x4444", PROGRAM="/usr/local/bin/v4ldev_namer ivtvDecYUV", SYMLINK+="%c" KERNEL=="vbi?", ATTR{name}=="ivtv? encoder VBI", ATTRS{vendor}=="0x4444", PROGRAM="/usr/local/bin/v4ldev_namer ivtvVbi", SYMLINK+="%c" KERNEL=="vbi?", ATTR{name}=="ivtv? decoder VBI", ATTRS{vendor}=="0x4444", PROGRAM="/usr/local/bin/v4ldev_namer ivtvVbiDec", SYMLINK+="%c" KERNEL=="vbi??", ATTR{name}=="ivtv? decoder VOUT", ATTRS{vendor}=="0x4444", PROGRAM="/usr/local/bin/v4ldev_namer ivtvVbiVout", SYMLINK+="%c" KERNEL=="radio?", ATTR{name}=="ivtv? encoder radio", ATTRS{vendor}=="0x4444", PROGRAM="/usr/local/bin/v4ldev_namer ivtvRadio", SYMLINK+="%c" KERNEL=="audio?", ATTR{name}=="ivtv? encoder VBI", ATTRS{vendor}=="0x4444", PROGRAM="/usr/local/bin/v4ldev_namer ivtvAudio", SYMLINK+="%c"
31-bttv.rulesKERNEL=="video?", DRIVERS=="bttv", ATTR{name}=="BT878 video (ProVideo PV150)", PROGRAM="/usr/local/bin/v4ldev_namer bttv_vid", SYMLINK+="%c" KERNEL=="vbi?", DRIVERS=="bttv", ATTR{name}=="BT878 vbi (ProVideo PV150)", PROGRAM="/usr/local/bin/v4ldev_namer bttv_vbi", SYMLINK+="%c" KERNEL=="audio?", DRIVERS=="Bt87x", PROGRAM="/usr/local/bin/v4ldev_namer bttv_aud", SYMLINK+="%c" KERNEL=="dsp?", DRIVERS=="Bt87x", PROGRAM="/usr/local/bin/v4ldev_namer bttv_dsp", SYMLINK+="%c"
32-uvc.rulesKERNEL=="video?", ATTR{name}=="em28xx #0 video", ATTRS{idVendor}=="2040", PROGRAM="/usr/local/bin/v4ldev_namer usbVid", SYMLINK+="%c" KERNEL=="vbi?", ATTR{name}=="em28xx #0 vbi", ATTRS{serial}=="4027620474", PROGRAM="/usr/local/bin/v4ldev_namer usbVbi", SYMLINK+="%c"
33-cx23885.rulesKERNEL=="video?", DRIVERS=="cx23885", PROGRAM="/usr/local/bin/v4ldev_namer hvrVid", SYMLINK+="%c" KERNEL=="video?", DRIVERS=="cx23885", PROGRAM="/usr/local/bin/v4ldev_namer hvrVid", SYMLINK+="%c"
Magically this results in my video devices showing up with a static symbolically linked name that mythtv and zoneminder can use every time!
Video Device Links[root@dvr rules.d]# ls -la /dev/vid* /dev/ivtv* /dev/btt* /dev/hvr* /dev/usbV* ls: cannot access /dev/usbV*: No such file or directory lrwxrwxrwx 1 root root 4 2008-11-09 11:16 /dev/bttv_vbi0 -> vbi1 lrwxrwxrwx 1 root root 4 2008-11-09 11:16 /dev/bttv_vbi1 -> vbi2 lrwxrwxrwx 1 root root 4 2008-11-09 11:16 /dev/bttv_vbi2 -> vbi3 lrwxrwxrwx 1 root root 4 2008-11-09 11:16 /dev/bttv_vbi3 -> vbi4 lrwxrwxrwx 1 root root 6 2008-11-09 11:16 /dev/bttv_vid0 -> video1 lrwxrwxrwx 1 root root 6 2008-11-09 11:16 /dev/bttv_vid1 -> video2 lrwxrwxrwx 1 root root 6 2008-11-09 11:16 /dev/bttv_vid2 -> video3 lrwxrwxrwx 1 root root 6 2008-11-09 11:16 /dev/bttv_vid3 -> video4 lrwxrwxrwx 1 root root 6 2008-11-09 11:16 /dev/hvrVid0 -> video6 lrwxrwxrwx 1 root root 6 2008-11-09 11:16 /dev/ivtv0 -> video0 lrwxrwxrwx 1 root root 7 2008-11-09 11:16 /dev/ivtvDec0 -> video16 lrwxrwxrwx 1 root root 7 2008-11-09 11:16 /dev/ivtvDecYUV0 -> video48 lrwxrwxrwx 1 root root 7 2008-11-09 11:16 /dev/ivtvEncYUV0 -> video32 lrwxrwxrwx 1 root root 6 2008-11-09 11:16 /dev/ivtvRadio0 -> radio0 lrwxrwxrwx 1 root root 4 2008-11-09 11:16 /dev/ivtvVbi0 -> vbi0 lrwxrwxrwx 1 root root 4 2008-11-09 11:16 /dev/ivtvVbiDec0 -> vbi8 lrwxrwxrwx 1 root root 5 2008-11-09 11:16 /dev/ivtvVbiVout0 -> vbi16 lrwxrwxrwx 1 root root 6 2008-11-09 11:16 /dev/video -> video0 crw-rw----+ 1 mythtv media 81, 0 2008-11-09 11:16 /dev/video0 crw-rw----+ 1 mythtv media 81, 1 2008-11-09 11:17 /dev/video1 crw-rw----+ 1 mythtv media 81, 16 2008-11-09 11:16 /dev/video16 crw-rw----+ 1 mythtv media 81, 2 2008-11-09 11:16 /dev/video2 crw-rw----+ 1 mythtv media 81, 24 2008-11-09 11:16 /dev/video24 crw-rw----+ 1 mythtv media 81, 3 2008-11-09 11:17 /dev/video3 crw-rw----+ 1 mythtv media 81, 32 2008-11-09 11:16 /dev/video32 crw-rw----+ 1 mythtv media 81, 4 2008-11-09 11:17 /dev/video4 crw-rw----+ 1 mythtv media 81, 48 2008-11-09 11:16 /dev/video48 crw-rw----+ 1 mythtv media 81, 5 2008-11-09 11:16 /dev/video5 crw-rw----+ 1 mythtv media 81, 6 2008-11-09 11:16 /dev/video6
Other web links to help out
|
|