Mes aventures avec ma carte de décompression mpeg2 sous linux


Le problème à résoudre

Je viens d'acheter une carte de décompression mpeg2 creative labs d'occasion afin de pouvoir regarder des DVDs sur mon PC à base de pentium II. Ce PC tourne sous linux (distribution Mandrake 9.2).

Mes sources d'information

Un conseil sur le forum Hardware du Mandrake club et quelques recherches sur internet avec les mots clé "linux", "hollywood", "dxr3", "mpeg2" et "em8300" m'ont permis de trouver, en particulier, les sites suivants :

http://dxr3.sourceforge.net/howto.html

http://lea-linux.org/hardware/xine_dxr3.php3

Le problème

Toutes ces sources sont relativement anciennes et aucune ne traite du daemon devfsd. Par ailleurs, le point (relativement fondamental) du microcode à charger dans le circuit em8300 est parfois seulement effleuré. Enfin, certaines informations sont fausses (ou en tous cas, pas complètement exactes).

Tâches à réaliser

L'installation de la carte

La première chose à faire est, bien sur, d'installer la carte dans le PC. Une fois ceci réalisé, pas besoin (dans un premier temps) d'en faire plus. Redémarrer le PC et jeter un coup d'oeil sur le fichier /proc/pci. Si le périphérique "Multimedia controller" y apparaît, tout va bien.

Les modules

La deuxième chose à réaliser est de charger les modules dans le noyau. A ce titre, il convient d'apporter une petite précision : Dans le howto du site dxr3.sourceforge.net, il est précisé que les cartes de marque Hollywood sont équipées d'une circuit graphique adv717 et que les cartes de marque Creative labs sont équipées d'un BT865. Ma carte est une Creative labs, mais son circuit graphique est un ADV717 !. IL convient donc de vérifier sur la carte avant de la monter dans le PC (il s'agit d'un petit circuit intégré carré d'environ 1cm de côté).

D'abord, il faut avoir les fichiers. Pour vérifier leur présence, taper les commandes suivantes :

find /lib -name em8300*
find /lib -name adv717x*
find /lib -name bt865*
find /lib -name i2c-core*
find /lib -name i2c-algo-bit*

Pour les modules deux choses à faire :

- ajouter une ligne : "em8300" dans le fichier /etc/modules,
- ajouter au fichier /etc/modules.conf les lignes suivantes :

alias char-major-121 em8300
pre-install i2c-algo-bit modprobe i2c-core
pre-install adv717x modprobe i2c-algo-bit
pre-install em8300 modprobe adv717x
options adv717x pixelport_16bit=1 pixelport_other_pal=0
options em8300 dicom_fix=0 dicom_control=0 dicom_other_pal=0

Pour les possesseurs d'une carte équipée d'un circuit BT865, les lignes à ajouter au fichier /etc/modules.conf deviennent :

alias char-major-121 em8300
pre-install i2c-algo-bit modprobe i2c-core
pre-install bt865 modprobe i2c-algo-bit
pre-install em8300 modprobe bt865
options em8300 dicom_fix=0 dicom_control=0 dicom_other_pal=0 use_bt865=1

Redémarrer le PC et taper la commande "lsmod" pour vérifier que les modules ont bien été chargés.

Les device

Il faut maintenant dire au daemon devfsd de créer quelques liens symboliques pour les entrées du circuit em8300. Dans le répertoire /etc/devfs/conf.d, il doit y avoir un fichier em8300.conf contenant les lignes suivantes :

REGISTER em8300-0 CFUNCTION GLOBAL symlink em8300-0 em8300
REGISTER em8300_ma-0 CFUNCTION GLOBAL symlink em8300_ma-0 em8300_ma
REGISTER em8300_mv-0 CFUNCTION GLOBAL symlink em8300_mv-0 em8300_mv
REGISTER em8300_sp-0 CFUNCTION GLOBAL symlink em8300_sp-0 em8300_sp
UNREGISTER em8300-0 CFUNCTION GLOBAL unlink em8300
UNREGISTER em8300_ma-0 CFUNCTION GLOBAL unlink em8300_ma
UNREGISTER em8300_mv-0 CFUNCTION GLOBAL unlink em8300_mv
UNREGISTER em8300_sp-0 CFUNCTION GLOBAL unlink em8300_sp

Un petit "/etc/rc.d/init.d/devfsd restart" et il ne reste plus qu'à vérifier que les devices sont là par un "ls -l /dev/e*".

Le microcode

Installer le package "em8300-0.13.0-8mdk.i586.rpm", disponible sur le CD 3 de la distribution Mandrake 9.2. Une fois le package installé"rpm -ivh em8300-0.13.0-8mdk.i586.rpm", le répertoire /usr/share/em8300 contient un fichier em8300.uc (c'est le microcode). Si ce microcode ne convenait pas, il conviendrait de récupérer le fichier .VXD sur le site du fabricant de la carte et d'en extraire le microcode (attention, il peut y en avoir plusieurs) à l'aide de l'utilitaire fourni dans le package par la commande "/usr/share/em8300/microcode_extract.pl *.VXD . toto" (enfin, c'est ce qui a marché chez moi). A la sortie, on récupère dans le répertoire courant des fichiers "microcode0.bin, microcode1.bin,...". Essayer de charger chacun de ces microcodes à l'aide de la commande "/usr/bin/em8300setup -f microcode0.bin" (pour le premier). L'un des microcodes acceptera de se charger. Alors, remplacer le fichier /usr/share/em8300/em8300.uc par ce microcode.

Automatiser le chargement du microcode

L'utilitaire /usr/bin/em8300setup a besoin que les device existent pour fonctionner. Au démarrage du PC, il ne faut pas que cet utilitaire soit lancé avant que le daemon devfsd ait fait son travail. Comment en être sûr ?. Simplement en demandant au daemon devfsd de lancer le chargement.

Dans le fichier /etc/devfs/conf.d/em8300.conf, insérer juste devant les lignes commençant par "UNREGISTER" la ligne suivante :

REGISTER em8300_sp-0 EXECUTE /usr/bin/em8300setup -f /usr/share/em8300/em8300.uc

Dès que ceci est fait, il est possible de vérifier le fonctionnement en tapant "/etc/rc.d/init.d/devfsd restart".

Conclusion

Maintenant, la carte est installé. Il ne reste plus qu'à installer les logiciels de lecture de DVD (Totem, xine, mplayer). Bonne vidéo.


Copyright © 2003, Jean-Marie Delapierre
Mise à jour le : 11 novembre 2003
URL : http://jm.delapierre.free.fr