Configuration udev pour deux cartes DVB

J'ai rencontré un problème dans la détection faite par le noyau des périphériques quant à l'ordre de détection de ceux-ci. En cas d'une configuration avec plusieurs cartes vidéos par exemple, vous pouvez avoir un ordre de détection aléatoire des cartes, ceci conduisant à ne pas savoir quelle carte est derrière /dev/video0 et /dev/video1 (et derrière /dev/dvb/adaptater0 et /dev/dvb/adapter1 dans le cas de carte dvb- (s, t ou c).

Ceci est assez perturbant pour un HTPC car, les chaînes accessibles ne seront pas les mêmes suivant le mode de réception. Heureusement udev est là pour nous sortir d'affaire et pour assigner à un périphérique un nom spécifique quelque soit l'ordre dans lequel la détection des cartes PCI a lieu.

Voici donc le contenu d'un fichier à ajouter à votre répertoire /etc/udev/rules.d/ pour que l'ordre de détection ne soit plus aléatoire, mais soit dépendant des règles énoncées ci-dessous. Ma configuration actuelle comprend deux cartes dvb, une pour le DVB-T (TNT et une autre DVB-S (pour la réception satellite). Et j'utilise la réception infra-rouge de la carte DVB-S.

# Règles pour assurer l'ordre de détection des cartes dvb

# Règle pour la carte AverMedia DVB-T

SUBSYSTEM=="dvb", ATTRS{vendor}=="0x1131", ATTRS{device}=="0x7133", \
PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter0/%%s $${K#*.}'", \
NAME="%c", \
OPTIONS+="last_rules"

KERNEL=="video*", SUBSYSTEM=="video4linux", ATTR{name}=="saa7133*", \
SYMLINK+="tnt"

KERNELS=="input*", ATTRS{name}=="saa7134*", \
NAME="input/event3", \
SYMLINK+="input/ir_dvb-t"

# Règle pour la carte Hauppauge DVB-S

SUBSYSTEM=="dvb", ATTRS{vendor}=="0x1131", ATTRS{device}=="0x7146", \
PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter1/%%s $${K#*.}'", \
NAME="%c", \
OPTIONS+="last_rules"

KERNEL=="video*", SUBSYSTEM=="video4linux", ATTR{name}=="av7110", \
SYMLINK+="sat"

KERNELS=="input*", ATTRS{name}=="DVB*", \
SYMLINK+="input/ir_dvb-s"

# Règle pour la webcam Logitech Quickcam Communicate Deluxe

KERNEL=="video*", SUBSYSTEM=="video4linux", ATTR{name}=="UVC*", \
SYMLINK+="webcam"

Pour tester votre configuration vous utiliser les commandes suivantes:

  • La commande suivante vous permet d'obtenir les informations sur l'arborescence et les valeur des variables pour un device donné:
    udevadm info -a -p $(udevadm info -q path -n /dev/video0)
    
  • La commande suivante vous permet de voir ce que vos règle udev génèrent effectivement.
    udevadm test /class/video4linux/video0
    

Il faudra alors modifier le fichier local_conf.py de Freevo pour y spécifier les paramètres suivants:

...
EVENT_DEVS = ['/dev/input/ir_dvb-s']
...
TV_VIDEO_GROUPS = [
VideoGroup(group_type   = 'dvb',
vdev         = '/dev/tnt',
adev         = '/dev/adsp',
desc         = 'AverMedia AverTV Hybrid FM',
record_group = 1),
VideoGroup(group_type   = 'freebox',
desc         ='Freebox Multiposte',
record_group = 1),
VideoGroup(group_type   = 'webcam',
vdev         = '/dev/webcam',
adev         = None,
desc         = 'Logitech Quickcam Communicate Deluxe',
record_group = None),
...
]