Ich habe Linux Mint x64 in Hyper-V als virtuelle Maschine der 2. Generation auf meinem Windows 10-Desktop eingerichtet. Ich möchte einen USB-Seriell-Konverter (FT232RL) an die VM anschließen, damit ich eingebettete Hardware programmieren und debuggen kann. Unter Windows wird der FT232RL als „USB-Seriell-Port (COMx)“ angezeigt und funktioniert einwandfrei. Wenn ich VirtualBox verwende, kann ich den COM-Port einfach an die VM anschließen oder von ihr trennen, und alles funktioniert einwandfrei.
Bei VMs der Generation 2 in Hyper-V werden die COM-Ports/Named Pipes im Gegensatz zu VMs der Generation 1 nicht in den Einstellungen angezeigt, daher bin ich mir nicht sicher, wie ich auf die entsprechenden Einstellungen zugreifen kann. Es gibt einen ArtikelHier(mehr Details), das zeigt, was ich erreichen möchte, außer dass ich Linux statt Windows als Gastbetriebssystem verwende.
Wie würde ich das also einrichten? Ich habe mir Setserial in Linux bereits angesehen, bin aber bisher zu keiner Lösung gekommen.
Antwort1
Es scheint also, dass es mindestens drei Möglichkeiten gibt, dies zum Laufen zu bringen, die ich im Laufe der Zeit herausgefunden habe.
Die erste Möglichkeit ist ganz unkompliziert: Sie können per Remote Desktop auf die virtuelle Maschine zugreifen, statt über den Hyper-V-Launcher. Natürlich muss das Gastbetriebssystem dafür einen Remote Desktop-Server haben und die Firewall muss geöffnet sein und die IP-Adresse muss in Reichweite des Hosts sein. Mit RDP können Sie zu „Optionen anzeigen“ -> „Lokale Ressourcen/Lokale Geräte und Ressourcen“ -> „Mehr“ -> „Ports“ auswählen. Stellen Sie dann wie gewohnt eine Verbindung her.
Diese Lösung ist nur für VMs der Generation 1 geeignet, da sie selbst keine Named Pipe auf dem Host-Betriebssystem erstellt. VMs der Generation 1 ermöglichen dem Benutzer, eine Named Pipe über das Einstellungsmenü der VMs zu erstellen. Die zweite Lösung ist die Verwendung vonCOMpipe. Dazu müssen Sie die Hyper-V-Einstellungen verwenden, um eine benannte Pipe auf einem der COM-Ports einzurichten, z. B. MySerialPort auf COM1 (erstellt den Pfad der benannten Pipe: \.\pipe\MySerialPort). Führen Sie dann auf dem Host-Betriebssystem ein Admin-PS aus und geben Sie einen Befehl wie diesen ein: COMpipe.exe -b 115200 -c \\.\COM5 -p \\.\pipe\MySerialPort
wobei COM5 der COM-Port auf dem Host-Betriebssystem ist, den Sie verwenden möchten. Wenn alles funktioniert, sollten Sie COM1 im Gastbetriebssystem verwenden und es direkt auf COM5 auf dem Host zuordnen können. Erfahrungsgemäß bedeutet ein Fehler von GLE=5, dass die benannte Pipe im Gastbetriebssystem nicht erstellt wird.
Die dritte Lösung ist wesentlich komplexer und wird beschriebenHier(Backup-Link). Dazu müssen Sie hub4com erstellen und com0com (auch als Administrator) und einige andere Skripte mit dem hub4com-Projekt sowohl auf dem Gast- als auch auf dem Host-Betriebssystem ausführen.
Abgesehen davon können Sie einen COM-Port einer benannten Pipe zuordnen (muss von einer Anwendung erstellt werden) mitVMComPort festlegenund sehen Sie sich die Zuordnungen an mitGet-VMComPort. Dies ist für Gen 2 Hyper-V VMs erforderlich, da COM-Portsnicht sichtbar(siehe Hinweis zu den FAQ zur Generation 2) in den Einstellungen beim Konfigurieren von Gen 2-VMs.