Differences between revisions 5 and 6
Revision 5 as of 2013-04-30 06:57:02
Size: 7374
Editor: ?Franck Joncourt
Comment: Ajout du fichier dkms.conf
Revision 6 as of 2013-07-26 16:54:31
Size: 7377
Editor: ?Franck Joncourt
Comment:
Deletions are marked like this. Additions are marked like this.
Line 245: Line 245:
Pour faire encore plus simple, l’utilisateur peut installer le package Debian xr17v25x-dkms_1.6-1_all.deb pour les noyaux supérieurs à 2.6.31.
Pour faire encore plus simple, l’utilisateur peut installer le package Debian [[http://www.dthconnex.com/packages/xr17v25x/|xr17v25x-dkms_1.6-1_all.deb]] pour les noyaux supérieurs à 2.6.31.
Line 256: Line 255:
 * Ajouter un lien vers le package Debian

Drivers

Les drivers pour le composant XR17v25x sont mis à disposition par le constructeur sur leur site. Ils peuvent être téléchargés à l’adresse suivante :

Pour la suite, nous allons utiliser le driver à sa version 1.6 fournit pour un noyau 2.6.37. Une fois téléchargé, il faut décompresser l’archive dans votre répertoire de travail. La méthode de compilation expliquée ici n’est fonctionnelle que pour les noyaux dont la version est supérieur ou égale à 2.6.32. Pour s’assurer que le noyau est compatible, lancer la commande :

$ uname –r
2.6.32-5-686

Pour pourvoir compiler le noyau il faut appliquer les patches header.diff et oscillator_14.75MHz.diff aux sources.

Patch header.diff :

--- a/xr17v25x.c
+++ b/xr17v25x.c
@@ -43,7 +43,6 @@
 #include <linux/string.h>
 #include <linux/kernel.h>
 #include <linux/slab.h>
-#include <linux/smp_lock.h>
 
 #include <linux/serial_reg.h>
 #include <linux/serial.h>

Patch oscillator_14.75MHz.diff :

--- a/xr17v25x.c
+++ b/xr17v25x.c
@@ -161,7 +161,7 @@
        [xr_8port] = {
                .flags          = FL_BASE0,
                .num_ports      = 8,
-               .base_baud      = 1500000,
+               .base_baud      = 921600,
                .uart_offset    = 0x200,
                .reg_shift      = 0,
                .first_offset   = 0,
@@ -170,7 +170,7 @@
        [xr_4port] = {
                .flags          = FL_BASE0,
                .num_ports      = 4,
-               .base_baud      = 1500000,
+               .base_baud      = 921600,
                .uart_offset    = 0x200,
                .reg_shift      = 0,
                .first_offset   = 0,
@@ -178,7 +178,7 @@
        [xr_2port] = {
                .flags          = FL_BASE0,
                .num_ports      = 2,
-               .base_baud      = 1500000,
+               .base_baud      = 921600,
                .uart_offset    = 0x200,
                .reg_shift      = 0,
                .first_offset   = 0,

Le composant xr17v258 utilisé dans mon cas fonctionne avec un oscillateur à 14.7456MHz (921600*16) et non pas 20MHz (1500000*16).

Méthode manuelle

Cette section décrit comment compiler, et installer le module de manière manuelle sous Debian GNU/Linux Squeeze.

Compilation

Afin de pouvoir compiler le module il faut installer quelques outils supplémentaires.

  • Les headers du noyau Linux cible (linux-headers-2.6*)
  • Les outils de compilation (make et gcc)

Pour installer le tout, lancer la commande :

# apt-get install make gcc linux-headers-`uname -r`

Maintenant, il faut se placer dans le répertoire précédemment décompressé contenant le driver et lancer la compilation.

$ make
make -C /lib/modules/`uname -r`/build SUBDIRS=/home/user/Documents/xr17v25x-lnx2.6.37-pak modules
make[1]: entrant dans le répertoire « /usr/src/linux-headers-2.6.32-5-686 »
CC [M] /home/user/Documents/xr17v25x-lnx2.6.37-pak/xr17v25x.o
Building modules, stage 2. 
MODPOST 1 modules
CC /home/user/Documents/xr17v25x-lnx2.6.37-pak/xr17v25x.mod.o
LD [M] /home/user/Documents/xr17v25x-lnx2.6.37-pak/xr17v25x.ko
make[1]: quittant le répertoire « /usr/src/linux-headers-2.6.32-5-686 »

En fonction de la version de Debian utilisé, certains warning peuvent apparaître. Ceci est dû au flags de compilation par défaut qui peuvent différents.

La compilation doit avoir généré un fichier xr17v25v.ko à la racine :

$ ls -al xr17*
-rwxrwx--- 1 user user 37777 28 mars 14:35 xr17v25x.c
-rw-r--r-- 1 user user 14926 28 mars 17:46 xr17v25x.ko
-rw-r--r-- 1 user user 1998 28 mars 14:37 xr17v25x.mod.c
-rw-r--r-- 1 user user  4140 28 mars 17:46 xr17v25x.mod.o
-rw-r--r-- 1 user user 11412 28 mars 17:46 xr17v25x.o

On peut maintenant vérifier que le module se charge correctement dans le noyau. Pour ce faire il faut lancer la commande suivante :

# insmod xr17v25v.ko

Puis lister les modules effectivement chargés. On doit voir apparaître le module xr17v25x :

# lsmod | grep xr17v25x
xr17v25x 45861 0

On vérifie ensuite la détection des 8 ports série :

# ls -al /dev/ttyXR*
crw-rw---- 1 root dialout 30, 0 28 mars 17:51 /dev/ttyXR0
crw-rw---- 1 root dialout 30, 1 28 mars 17:51 /dev/ttyXR1
crw-rw---- 1 root dialout 30, 2 28 mars 17:51 /dev/ttyXR2
crw-rw---- 1 root dialout 30, 3 28 mars 17:51 /dev/ttyXR3
crw-rw---- 1 root dialout 30, 4 28 mars 17:51 /dev/ttyXR4
crw-rw---- 1 root dialout 30, 5 28 mars 17:51 /dev/ttyXR5
crw-rw---- 1 root dialout 30, 6 28 mars 17:51 /dev/ttyXR6
crw-rw---- 1 root dialout 30, 7 28 mars 17:51 /dev/ttyXR7

Puis on décharge le module du noyau.

# rmmod xr17v25v.ko

Installation

Pour le moment, il faut charger manuellement le module à chaque démarrage. Il est donc nécessaire de le déclarer dans la liste des modules du noyau.

Pour ce faire, nous allons tout simplement copier le module (fichier xr17v25x.ko) dans le répertoire :

  • /lib/modules/2.6.32-5-686/kernel/drivers/pci/

Pour notre noyau en 2.6.32-5-686. Ensuite on indique on rafraichit la liste des modules du noyau avec la commande :

# depmod –a

Il suffit maintenant de redémarrer l’ordinateur et c’est bon.

Méthode automatisée avec dkms

L’outil DKMS permet l’installation et la mise à jour de modules noyau facilement. L’outil dkms permet de recompiler automatiquement un module kernel lors de l’installation d’un nouveau noyau.

Compilation

Il faut dans un premier temps copier les sources de notre driver dans le répertoire /usr/src/xr17v25x-1.6, qu’il faudra auparavant créer. Placer s’y le fichier dkms.conf suivant :

PACKAGE_NAME="xr17v25x"
PACKAGE_VERSION="1.6"
CLEAN="make clean"
MAKE[0]="make"
BUILT_MODULE_NAME[0]="xr17v25x"
DEST_MODULE_LOCATION[0]="/updates"
AUTOINSTALL="yes"

On ajoute ensuite le driver à la liste des modules dkms pour pouvoir faire les recompilations de manière automatique.

# dkms add -m xr17v25x -v 1.6
Creating symlink /var/lib/dkms/xr17v25x/1.6/source -> /usr/src/xr17v25x-1.6
DKMS: add Completed.

Puis on le compile une première fois.

# dkms build -m xr17v25x -v 1.6
Kernel preparation unnecessary for this kernel.  Skipping...
Building module:
cleaning build area....
make KERNELRELEASE=2.6.32-5-686....
cleaning build area....
DKMS: build Completed.

Installation

Pour charger le driver dans le noyau, rien de plus simple :

# dkms install -m xr17v25x -v 1.6
xr17v25x.ko:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation 
- Installing to /lib/modules/2.6.32-5-686/updates/dkms/
depmod.....
DKMS: install Completed.

Ajouter ensuite le module au fichier /etc/modules.conf pour qu'il soit chargé au démarrage.

echo "xr17v25x" >> /etc/modules.conf

Package debian

Pour faire encore plus simple, l’utilisateur peut installer le package Debian xr17v25x-dkms_1.6-1_all.deb pour les noyaux supérieurs à 2.6.31.

Ajouter ensuite le module au fichier /etc/modules.conf pour qu'il soit chargé au démarrage.

echo "xr17v25x" >> /etc/modules.conf

TODOs

  • Une méthode pour qu'il soit chargé automatiquement sans ajouté quoi que ce soit au fichier /etc/modules.conf ?