Contents
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 ?