Etant donné que je voulais pouvoir faire des choses amusantes avec les routeurs de type Linksys WRT avec Nantes-Wireless (de ce style notamment), il me fallait un moyen de me procurer un port série. J'avais certes des ports séries sur mes machines de bureau, mais j'effectue la plupart de mon travail de développement avec mon portable.

Achat d'un convertisseur USB - Série

Si les ports séries ont disparus des listes des interfaces en standard sur les PCs portables, les ports USB eux ont litérallement trouvés leur place. Il est en effet impossible de ne pas passer à côté d'une paire de ports USB lors de l'achat d'une nouvelle machine.

L'USB, comme son nom l'indique (Universal Serial Bus : Ports Série Universel) est également un port série. Il sont certes beaucoup plus évolués que les ports séries d'origine, mais le principe reste le même. Il est donc ainsi possible de transformer un port USB en un port série classique.

J'ai porté mon dévolu sur le convertisseur série 1 port en vente sur matériel.net. Il est basé sur le chipset Prolific Technology Inc. très bien reconnu par Linux sous le nom PL2303.

Compilation du module pour Linux

Ce genre de périphérique est assez rarement supporté par défaut dans les distributions, il va donc être nécessaire de compiler le module à partir des sources du noyau. Je considère que vous êtes capable de récupérer les sources du noyau pour votre distribution et de les placer dans le répertoire : /usr/src/linux.

Placez-vous dans ce répertoire et ajoutez les lignes :

CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_GENERIC=y
CONFIG_USB_SERIAL_PL2303=m

au fichier .config afin d'activer le support du convertisseur.

Lancez alors la compilation des modules, suivi de leur installation :

shell# make modules
   CHK     include/linux/version.h
   HOSTLD  scripts/kconfig/conf
   SPLIT   include/linux/autoconf.h -> include/config/*
   Building modules, stage 2.
   MODPOST
   CC [M]  drivers/usb/serial/usbserial.o
   CC [M]  drivers/usb/serial/pl2303.o
   LD [M]  drivers/usb/serial/usbserial.ko
shell# make modules_install
   INSTALL drivers/usb/serial/pl2303.ko
   INSTALL drivers/usb/serial/safe_serial.ko
   INSTALL drivers/usb/serial/usbserial.ko

Chargement du module

Maintenant que le module est compilé et installé, vous pouvez le charger à l'aide de la commande :

shell# modprobe pl2303

Vérifiez qu'il est bien reconnu comme chargé :

shell# lsmod
 Module                  Size  Used by
 pl2303                 16068  0
 usbserial              25064  1 pl2303

Branchez maintenant votre convertisseur, puis faites :

shell# dmesg
 hub 3-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x101
 usb 3-1: new full speed USB device using uhci_hcd and address 3
 usb 3-1: default language 0x0409
 usb 3-1: new device strings: Mfr=1, Product=2, SerialNumber=0
 usb 3-1: Product: USB-Serial Controller
 usb 3-1: Manufacturer: Prolific Technology Inc.
 usb 3-1: uevent
 usb 3-1: device is bus-powered
 usb 3-1: configuration #1 chosen from 1 choice
 usb 3-1: adding 3-1:1.0 (config #1, interface 0)
 usb 3-1:1.0: uevent
 usbserial_generic 3-1:1.0: usb_probe_interface
 usbserial_generic 3-1:1.0: usb_probe_interface - got id
 pl2303 3-1:1.0: usb_probe_interface
 pl2303 3-1:1.0: usb_probe_interface - got id
 pl2303 3-1:1.0: pl2303 converter detected
 usb 3-1: pl2303 converter now attached to ttyUSB0
 drivers/usb/core/inode.c: creating file '003'
 hub 3-0:1.0: state 7 ports 2 chg 0000 evt 0002

Si tout s'est bien passé, le périphérique est reconnu par les drivers et il est accessible par le biais d'un fichier {dev} ; ici : {/dev/ttyUSB0}.

Connexion à /dev/ttyUSB0

L'avantage d'un port série c'est qu'il est maintenant possible de se connecter à un terminal (par exemple à celui du WRT ;) ). Pour ce faire, il faut utiliser la commande {stty} (pour Serial TTY) :

 shell# stty -F /dev/ttyUSB0

Il se peut que vous n'ayez pas les droits d'accéder au fichier spécial /dev/ttyUSB0. Placez alors les permissions sur ce fichier comme ça vous arrange. Il se peut également que vous pouissiez vous ajouter au groupe tty présent sur plusieurs distributions.