Transfert des ports USB à partir de Windows 10 pour le travail à distance

Lorsqu'une personne creuse un bunker depuis de nombreuses années et y stocke de la nourriture, elle doit ressentir une profonde satisfaction morale si le bunker est nécessaire. Il se fera un plaisir de dire: "Et je dis et-et-il!" La même chose s'applique à ceux qui ont stocké des aliments dans le garde-manger, lorsque tout le monde a été acheté dans les magasins uniquement pour aujourd'hui. Mais avec notre complexe de travail à distance Redd, je n'ai pas envie de jubiler. Il a été conçu pour l'éloignement en temps de paix. Et il a été utilisé bien avant les premières nouvelles de Chine.

Pendant longtemps, je n'ai rien écrit sur lui. D'autres projets distraient et l'intérêt, à en juger par la note du dernier des articles publiés, a déjà baissé. Il faut beaucoup d'efforts pour préparer un article, et il est logique de le faire uniquement s'il est nécessaire à un nombre suffisant de lecteurs.

Mais puisque tout le monde est sur les lèvres maintenant, il y avait un désir de partager une chose qui pourrait aider quelqu'un. Ce n'est pas notre développement, j'ai mené des recherches dans le cadre du travail sur le travail à distance avec les cartes de débogage All-Hardware. Ici, je vais décrire leurs résultats maintenant. Le projet USB / IP est connu de beaucoup. Mais il a longtemps été restreint par les auteurs. Les derniers pilotes étaient sous WIN7. Aujourd'hui, je vais décrire où télécharger l'option pour WIN10 et montrer comment je l'ai testée. De plus, les développeurs de l'analogue moderne assurent qu'ils ont fait non seulement un client Windows, mais aussi un serveur Windows (bien que dans ce mode je n'ai pas effectué de test: la tâche ne l'exigeait pas). Mais pour quelqu'un, cela peut aussi être utile.




introduction


Tout d'abord, une courte histoire sur ce qu'est l'USB / IP. Il s'agit d'un ensemble de programmes qui vous permettent de transférer un périphérique USB via le réseau. L'appareil lui-même est connecté au serveur. Le client se trouve sur une autre machine. Dans le même temps, il existe une application sur la machine cliente qui n'est pas du tout conçue pour fonctionner avec le réseau. Il veut un vrai périphérique USB. Et il reçoit des informations indiquant que cet appareil est connecté. Un pilote standard est installé sur ce périphérique. En général, le client pense que cela fonctionne avec un périphérique USB local.

Quelqu'un jette des clés de sécurité. Nous avons vérifié la possibilité d'un accès à distance à l'adaptateur JTAG.

Le projet USB / IP se développait activement jusqu'en 2013. Ensuite, la branche Windows s'est arrêtée. En général, même un binaire signé a été publiéchauffeur. Mais c'était sous Windows 7. La branche Linux a poursuivi son développement, et ce service a été intégré au système d'exploitation lui-même. À tout le moins, il est définitivement intégré à la version Debian. De plus, pour Linux, il y a à la fois un client et un serveur, et pour Windows, seul le client a été créé à l'origine. Le serveur sous Windows n'a pas été créé.

Il y a un très bon article sur Habré , qui peut être utilisé à la fois comme référence pour travailler avec ce service et comme astuce pour travailler avec lui.

Option pour la version actuelle de Windows


Mais peu importe la qualité de Windows 7, il est déjà mort. Dans le cadre du travail sur All-Hardware, nous avons envisagé diverses options pour résoudre l'un des problèmes, et nous n'avons eu qu'à vérifier un certain nombre d'alternatives sur la base de «fit - not fit». Il était impossible de passer de nombreuses heures-homme à vérifier. Et l'altération du pilote sous Windows 10 pourrait se glisser en soi. Par conséquent, une recherche a été effectuée sur le réseau, ce qui a amené usbip-win au projet . Au moment de sa découverte, la nouvelle version était datée du 23 février 2020, c'est-à-dire que le projet était en direct. Il peut être construit sous WIN7 et WIN10. De plus, contrairement au projet d'origine, non seulement un client Windows, mais aussi un serveur Windows peuvent être construits.

J'ai vérifié, le projet est parfaitement assemblé et installé, donc un travail supplémentaire a été effectué avec lui. Dans le fichier readme Il existe un lien vers du code binaire prêt à l'emploi pour ceux qui ne veulent pas construire par eux-mêmes.

La triste partie de la vérification: le côté serveur


Je vais d'abord vous expliquer comment la vérification a été effectuée dans le cadre de notre projet. Ça ne s'est pas très bien terminé là-bas. Nous avons vérifié l'adaptateur ST-LINK installé dans le cas du complexe Redd, car j'ai déjà noté que le complexe utilise le système d'exploitation Linux de l'assembly Debian, et cet assemblage contient le service USB / IP intégré.

Selon l'article, installez le service:

sudo apt-get update 
sudo apt-get upgrade 
sudo apt-get install usbip

Le reste de l'article détaille comment automatiser le processus de chargement d'un service. Si je comprends bien Linux, j'ai déjà écrit plusieurs fois. Mal versé. Je n'ai pas l'habitude de citer les textes des autres avec un visage intelligent, en comprenant mal l'essence. Par conséquent, je rappellerai une fois de plus un lien vers un article merveilleux , où tout est dit, et je me montrerai ce que j'ai fait à chaque démarrage de l'OS (car tout n'était nécessaire qu'à des fins de vérification):

sudo modprobe usbip-core
sudo modprobe usbip-host
sudo usbipd -D

Le but des deux premiers des sorts ci-dessus m'est inconnu, mais sans eux, certains répertoires ne sont pas créés, et sans ces répertoires, il n'y aura pas d'exportation d'un port USB. Les répertoires sont créés uniquement jusqu'au redémarrage du système. Vous devez donc les créer à chaque fois. La troisième ligne - tout est plus clair avec elle, elle démarre le service.

Maintenant, nous regardons le nom de l'appareil:

user@redd:~$ sudo usbip list -l
- busid 1-3 (046d:082d)
   Logitech, Inc. : HD Pro Webcam C920 (046d:082d)

 - busid 1-4 (1366:0101)
   SEGGER : J-Link PLUS (1366:0101)

 - busid 1-5.1 (067b:2303)
   Prolific Technology, Inc. : PL2303 Serial Port (067b:2303)

 - busid 1-5.4.1.1 (0483:5740)
   STMicroelectronics : STM32F407 (0483:5740)

 - busid 1-5.4.1.3 (0483:3748)
   STMicroelectronics : ST-LINK/V2 (0483:3748)
<...>

Il s'avère que nous avons besoin d'un périphérique et d'un busid égal à 1-5.4.1.3.

Nous donnons la commande:

sudo usbip bind --busid=1-5.4.1.3

Tout, le serveur est prêt à fonctionner.

La triste partie du chèque: la partie client


Nous installons le pilote sous Windows (nous ne le faisons qu'une seule fois, puis il sera toujours installé). Pour ce faire, exécutez le fichier usbip.exe avec l'argument install :

usbip.exe install en tant qu'administrateur.

Voyons maintenant si le périphérique est disponible pour nous:

usbip.exe list --remote=192.168.10.123

Nous nous assurons qu'il est sur la liste. Eh bien, et connectez-le:

usbip.exe attach --remote=192.168.10.123 --busid=1-5.4.1.3

Un nouveau périphérique USB apparaît dans le gestionnaire de périphériques, Keil le voit parfaitement ...

Mais c'est là que se termine l'agréable. Un petit programme est versé dans une clé USB pendant environ une minute. Les tentatives pour parcourir les lignes passent de 5 à 20 secondes par ligne. C'est inacceptable. Pendant une pause, un trafic d'environ 50 kilobits par seconde va dans les deux sens. Va longtemps et pensivement.

Honnêtement, le délai m'a conduit à deviner pourquoi tout était si mauvais. Je soupçonne qu'il y a du trafic JTAG sur le réseau. Et il s'exécute en petits paquets dans les deux sens, d'où les problèmes. L'étude s'est donc achevée avec le résultat: "Ne convient pas au projet".

La partie amusante: la préparation


Même alors, il m'est venu à l'esprit que du coin de l'œil, j'ai vu que dans l'adaptateur CMSIS DAP JTAG, l'USB n'utilise pas du trafic JTAG pur, mais des commandes. Le trafic JTAG lui-même est déjà formé à l'intérieur de l'adaptateur. J'ai longtemps voulu le vérifier, mais toutes mes mains n'ont pas atteint. Le transfert de masse vers un site distant l'a forcé à le faire (un problème est survenu). Qu'est-ce que CMSIS DAP? Il s'agit d'un adaptateur JTAG recommandé par ARM pour les contrôleurs Cortex-M. Les codes source des différents contrôleurs sont publiés sur GitHub, vous pouvez souder l'adaptateur en fonction de l'un d'eux. Je vais maintenant donner un lien vers un clone du projet adapté pour la planche à pain Blue Pill: https://github.com/x893/CMSIS-DAP , mais les moteurs de recherche peuvent également afficher le compte ARM officiel.

Afin de ne pas dépenser un PC entier sur le serveur, pour vérification, j'ai fait une sorte de complexe Yelloww (purement par la couleur du plastique à partir duquel le boîtier est fabriqué):



Raspberry Pi joue le rôle de serveur avec le système d'exploitation Raspbian installé (c'est le même Debian, ce qui signifie qu'il y a le serveur requis ) L'une des pilules bleues agit comme un adaptateur CMSIS DAP, la seconde comme un périphérique débogué.

Nous définissons et configurons le service de la même manière. Sauf ici, la liste des appareils autorisés à l'exportation est beaucoup plus modeste:

pi@raspberrypi:~ $ sudo usbip list -l
 - busid 1-1.1 (0424:ec00)
   Standard Microsystems Corp. : SMSC9512/9514 Fast Ethernet Adapter (0424:ec00)

 - busid 1-1.4 (c251:f001)
   Keil Software, Inc. : unknown product (c251:f001)

Il est clair que nous exportons et importons ici le périphérique busid = 1-1.4.

Et ici c'est spécifiquement avec CMSIS DAP que j'ai régulièrement un petit problème. Dans le gestionnaire de périphériques, je vois une telle nuisance:



Permettez-moi de vous rappeler que l'article est écrit sur le principe "Mieux n'est pas mauvais, mais aujourd'hui qu'idéal, mais demain." Des problèmes de télétravail apparaissent en ce moment. J'espère que dans un avenir prévisible, elles ne seront plus pertinentes. En attendant, ils sont pertinents - je montre comment je contourne ce problème manuellement. D'abord, j'éteins l'appareil:



puis j'allume immédiatement:



et il commence à fonctionner sans problème. Dans Keil, nous changeons le débogueur en CMSIS DAP:



Et le voici:



Lorsque vous travaillez sur un réseau local, tout vole simplement. Mais il est clair que personne ne s'intéresse au réseau local. J'ai essayé de transférer le port de l'appareil à la maison, puis de me connecter à distance à la machine au travail et d'acheminer le «firmware» à partir de là. La connexion chez mon fournisseur d'origine est très, très lente, surtout - de moi à l'extérieur. Le contrôleur clignote environ trois fois plus lentement que lorsqu'il est connecté directement à USB. Traçage ... Eh bien, environ une seconde par ligne, exactement plus. En général, supportable. Avec de bons prestataires, j'espère que ce sera mieux.

Conclusion


Le projet usbip-win est un remplacement moderne du projet USB / IP. Il vit et se développe. En même temps, il fournit non seulement la fonction client pour Windows, mais également la fonction serveur. La compatibilité avec la version Linux est enregistrée.

La stabilité du périphérique USB distant était étonnamment étonnante. J'étais sûr que des délais d'attente se produiraient. Peut-être qu'ils se produiront quelque part, mais pour les adaptateurs JTAG, il n'y a pas eu un seul échec. Malheureusement, tous les périphériques USB ne peuvent pas être transférés via le réseau en raison de la faible vitesse du système résultant. Mais dans le cas des adaptateurs JTAG, vous pouvez envisager des choses alternatives. En particulier, CMSIS-DAP au lieu de ST-LINK.

Les deux projets examinés (usbip-win et CMSIS-DAP) peuvent être téléchargés depuis GitHub sous forme de codes source.

Si cela aide quelqu'un à organiser l'accès à distance à l'équipement, je serai heureux. L'utilisation du Raspberry Pi vous permettra de déposer de l'équipement à des endroits arbitraires.

All Articles