J'ai un appareil sous test (DUT) et je mesure sa consommation d'énergie à l'aide d'un enregistreur de données Power Analyzer en utilisant les données de /dev/ttyUSB0
.
Le problème est que le DUT est maintenant à distance du poste de travail avec lequel je collectais des données, mais dans le même réseau, j'ai besoin d'utiliser un 2ème PC qui est directement connecté via USB au Power Anlayzer comme une sorte de proxy USB et ssh créer une sorte de lien symbolique sur la machine de mesure de l'USB de la machine "proxy".
Compte tenu du schéma ci-dessus, comment le 1 er PC peut-il accéder /dev/ttyUSB0
au 2 ème PC directement connecté, de manière à ce qu'un programme lisant le flux depuis le 1 er PC ne remarque pas la différence?
la source
Vous pouvez utiliser une combinaison de
ser2net
etsocat
. Par exemple, j'ai un robot connecté à un Raspberry Pi via un port série. Le raspberry pi est connecté à mon réseau local (équivalent à votre 2ème PC). Et mon ordinateur portable est connecté au même réseau local (équivalent à votre 1er PC). Ensuite, j'utilise ser2net pour transmettre le port série via TCP à partir du 2e PC et créer un fichier de périphérique série proxy à l'aidesocat
du 1er PC.Cette configuration peut également fonctionner pour vous. Solution proposée:
Étape 1: Installez le package ser2net sur votre 2ème PC (en suivant votre schéma)
sudo apt-get install ser2net
ser2net écoute un port TCP et peut acheminer des données vers et depuis un port série via le port TCP. Vous pouvez configurer les ports série pour lesquels vous souhaitez créer des "proxys" via son fichier de configuration
/etc/ser2net.conf
.Étape 2: configurer ser2net sur le 2ème PC
Par exemple, si vous avez un périphérique connecté à
/dev/ttyACM0
avec un débit en bauds115200
et que vous souhaitez le servir à partir du port localhost 3333, vous pouvez ajouter la ligne suivante à/etc/ser2net.conf
3333:raw:0:/dev/ttyACM0:115200,remctl
Après avoir créé le fichier de configuration, puis lancez ser2net en exécutant sur le deuxième PC:
ser2net
ou (s'il est déjà en cours d'exécution, redémarrez-le comme ci-dessous)
/etc/init.d/ser2net restart
Une chose importante ici est l'option remctl. Il permet au côté client (1er PC de votre schéma) de se connecter à l'appareil et de choisir librement les options de connexion série. Je pense que de cette façon, la communication série est complètement transparente du point de vue de l'espace de travail de collecte de données. Voir plus de détails ici .
Étape 3: configurer le fichier de périphérique série proxy sur le poste de travail de collecte de données (1er PC)
(si vous n'avez pas de socat, alors
sudo apt-get install socat
)Enfin, dans un terminal sur le 1er PC,
socat
créons un port série proxy qui écoutera depuis le port tcp:socat pty,link=$HOME/MyProxySerialPort,waitslave tcp:$ip:$port,forever,reuseaddr,keepalive
Où, dans cet exemple
ip=<2nd-PC-IP-address>
etport=3333
(ou ce que vous avez choisi lors de la configuration/etc/ser2net.conf
sur le 2ème PC).Étape 4: se connecter à MyProxySerialPort
Vous devriez maintenant pouvoir ouvrir une connexion série normalement à l'appareil situé
$HOME/MyProxySerialPort
sur le 1er PC.Cet article de blog contient également plus d'informations sur cette configuration: http://techtinkering.com/2013/04/02/connecting-to-a-remote-serial-port-over-tcpip/
la source
Dans les noyaux Linux qui utilisent un lien symbolique de / dev / bus / usb / BUS_ID / DEV_ID vers / dev / char / MAJOR: MINOR socat ne peut pas ouvrir de tels périphériques en raison d'une erreur IOCTL inappropriée!
Cette approche ne semble donc pas fonctionner directement sur les périphériques USB.
J'ai essayé usbip qui est une implémentation plus proche mais uniquement pris en charge sur les noyaux plus anciens.
Comme ma solution concernait les lecteurs de cartes connectés via pcsc-lite, il y avait une meilleure solution en utilisant la variable d'environnement pour les clients libpcsclite .
De cette façon, un socket de domaine Unix différent peut être spécifié. Et celui-ci peut être transmis au socket du lecteur de carte sur un hôte distant en utilisant socat :
Exécutez ceci sur l'hôte pour remplacer le lecteur de carte
exécutez ceci sur l'hôte CARD_READER_HOST avec le lecteur de carte pcsc connecté
la source
/dev/ttyUSB0
ou un analyseur de puissance qui n'utilise pas PCSCLITE. Si vous souhaitez publier ces informations, il serait préférable de poser une question distincte. Vous êtes autorisé et encouragé à publier des questions sur le sujet pour lesquelles vous avez une réponse immédiate.:
personnage sur le chemin? La page de manuel de socat, section "SPÉCIFICATIONS D'ADRESSE", contient un paragraphe sur la façon d'échapper les caractères (à partir de la v1.5.0).