177 votes

Port série virtuel pour Linux

J'ai besoin de tester une application de port série sous Linux, cependant, ma machine de test ne possède qu'un seul port série.

Existe-t-il un moyen d'ajouter un port série virtuel à Linux et de tester mon application en émulant un périphérique via un shell ou un script ?

Note : Je ne peux pas remapper le port, il est codé en dur sur ttys2 et je dois tester l'application telle qu'elle est écrite.

7voto

Mauro Ciancio Points 100

En utilisant les liens postés dans les réponses précédentes, j'ai codé un petit exemple en C++ en utilisant un port série virtuel. J'ai poussé le code dans GitHub : https://github.com/cymait/virtual-serial-port-example .

Le code est assez explicite. D'abord, vous créez le processus maître en exécutant ./main master et il affichera sur stderr le périphérique utilisé. Après cela, vous invoquez ./main slave device, où device est le périphérique imprimé dans la première commande.

Et c'est tout. Vous avez un lien bidirectionnel entre les deux processus.

En utilisant cet exemple, vous pouvez tester l'application en envoyant toutes sortes de données, et voir si elle fonctionne correctement.

En outre, vous pouvez toujours établir un lien symbolique avec le dispositif, de sorte que vous n'avez pas besoin de recompiler l'application que vous testez.

5voto

Howler Points 1459

Pourriez-vous utiliser un adaptateur USB->RS232 ? J'en ai quelques-uns, et ils utilisent simplement le pilote FTDI. Ensuite, vous devriez pouvoir renommer /dev/ttyUSB0 (ou ce qui a été créé) en /dev/ttyS2 .

5voto

Adam Davis Points 47683

Je peux penser à trois options :

Mettre en œuvre la RFC 2217

RFC 2217 couvre un port de communication à la norme TCP/IP qui permet à un client sur un système d'émuler un port série aux programmes locaux, tout en envoyant et recevant de manière transparente des données et des signaux de contrôle à un serveur sur un autre système qui possède réellement le port série. Voici un aperçu de haut niveau .

Ce que vous devez faire, c'est trouver ou implémenter un pilote de port com client qui implémenterait le côté client du système sur votre PC - en ayant l'air d'être un vrai port série, mais en réalité en transférant tout vers un serveur. Vous pourriez obtenir ce pilote gratuitement auprès de Digi, Lantronix, etc. en support de leurs serveurs de port série autonomes.

Vous implémenteriez alors le côté serveur de la connexion localement dans un autre programme - permettant au client de se connecter et émettant les données et les commandes de contrôle selon les besoins.

Ce n'est probablement pas trivial, mais la RFC existe, et vous pourriez trouver un projet open source qui implémente un ou les deux côtés de la connexion.

Modifier le pilote du port série linux

Alternativement, la source du pilote de port série pour Linux est facilement disponible. Prenez-le, enlevez les pièces de contrôle du matériel, et faites en sorte que ce pilote gère deux ports /dev/ttySx, comme une simple boucle. Puis connectez votre programme réel au ttyS2 et votre simulateur à l'autre ttySx.

Utiliser deux câbles USB<-->Série dans un loopback

Mais la chose la plus facile à faire en ce moment ? Dépensez 40 $ pour deux périphériques USB à port série, connectez-les ensemble (null modem) et disposez de deux véritables ports série - un pour le programme que vous testez, un pour votre simulateur.

-Adam

5voto

Sadeesh Kalhara Points 73
$ socat -d -d pty,link=/tmp/vserial1,raw,echo=0 pty,link=/tmp/vserial2,raw,echo=0

Générera des liens symboliques de /tmp/vserial1 y /tmp/vserial2 pour les ports série virtuels générés dans /dev/pts/*

Ressources

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X