Aujourd’hui petit tutoriel pour ceux qui comme moi cherchent à émuler des ports série (également appelés ports RS-232) sous Linux. Nous verrons, au travers de ce tutoriel, comment compiler et charger le module tty0tty, qui va se charger de créer quatre paires de ports RS-232 (allant de tnt0 à tnt7), communiquant deux à deux. Ainsi, tnt0 et tnt1 agiront comme s’ils étaient reliés à un même câble physique : tout caractère transmis à l’un sera reçu par l’autre, et inversement. Même principe pour tnt2 et tnt3, tnt4 et tnt5, et enfin tnt6 et tnt7. Let’s go!
Installation du module tty0tty
Note : les commandes suivantes devront être exécutées en tant que root. Un petit sudo -i
fera l’affaire.
Nous allons commencer par cloner le dépôt contenant les sources dans un répertoire, ici /opt
:
cd /opt
git clone https://github.com/freemed/tty0tty
Une fois le dépôt cloné, nous allons pouvoir passer à la compilation :
cd tty0tty/module
make
Si la compilation s’est déroulée sans erreurs, nous allons pouvoir passer à la prochaine étape : l’installation dans le noyau. À noter que cette étape sera à réaliser après chaque mise à jour du noyau.
cp /opt/tty0tty/module/tty0tty.ko /lib/modules/$(uname -r)/kernel/drivers/misc
Il ne nous reste plus qu’à charger le module dans le noyau. Pour cela, nous allons re-générer les « maps » de dépendances (man depmod
pour plus d’informations) puis charger le module dans le noyau :
depmod
modprobe tty0tty
Enfin, nous pouvons, si vous le souhaitez, automatiser le chargement du module à chaque démarrage du noyau. Pour cela, il suffit d’éditer (toujours avec les droits root) le fichier /etc/modules
nano /etc/modules
Puis d’y rajouter la ligne suivante, tout à la fin :
tty0tty
Vérifions que tout fonctionne correctement
Pour tester le bon fonctionnement de nos ports série, rien de plus simple. Ouvrez deux terminaux. Dans le premier, nous écouterons sur /dev/tnt0 :
sudo cat /dev/tnt0
Dans le second, nous enverrons un message à /dev/tnt1. Les deux ports agissant comme s’ils étaient physiquement reliés, /dev/tnt0 devrait ainsi pouvoir le recevoir.
sudo echo "Bonjour le monde !" > /dev/tnt1
Si tout s’est bien passé, vous devriez avoir quelque chose comme ceci :
Et voilà. Enjoy !