当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 将主机 USB 设备连接到 WSL 或 Hyper-V VM

作者:精品下载站 日期:2024-12-15 00:48:09 浏览:14 分类:玩电脑

将主机 USB 设备连接到 WSL 或 Hyper-V VM


您可以使用开源 usbipd-win 项目从 Windows Linux 子系统 (WSL2) 或 Hyper-V 虚拟机访问计算机的物理 USB 设备。此工具允许您将连接到 Windows 主机的外部 USB 设备传递到任何 Linux 发行版(作为 WSL 运行)或虚拟机。这允许从虚拟机或 Linux 环境中使用 USB 设备执行任何操作(刷新 Android 设备、使用 ADB 和 Fastboot、访问智能卡、使用 Arduino 硬件等)。

Usbipd-win 使用 TCP/IP 协议通过 VM/WSL 和主机 Windows 操作系统之间的虚拟网络接口转发 USB 设备流量。首先,我们将展示如何在 Windows 主机上安装 usbipd-win 服务器,然后我们将在 Linux (WSL) 上安装 USB/IP 客户端并将共享 USB 设备连接到 Linux VM (WSL)。

Usbipd-win 支持 Windows 8.1 x64 和 Windows Server 2012 R2(及更高版本),并允许与其他虚拟机(包括 Hyper-V 上的 WSL2 和 Linux 来宾操作系统)共享 Windows 上的本地 USB 设备。以前在 Hyper-V 上,只能通过相当有限的增强会话模式将 USB 驱动器重定向到 VM 或其他 USB 设备类型。

Usbipd-win 项目可在 GitHub (https://github.com/dorssel/usbipd-win) 上获取。您可以手动下载并安装它(有 MSI 安装文件可用),但使用内置 Winget 包管理器安装要快得多。

winget install --interactive --exact dorssel.usbipd-win

[玩转系统] 将主机 USB 设备连接到 WSL 或 Hyper-V VM

该程序将在 Windows 上创建一个单独的 usbipd(USBIP 设备主机) 服务:

"C:\Program Files\usbipd-win\usbipd.exe"

它监听 TCP 端口 3240

[玩转系统] 将主机 USB 设备连接到 WSL 或 Hyper-V VM

Windows Defender 防火墙中已为 usbipd.exe 创建了一条附加规则,以允许本地网络上的计算机访问 TCP 端口 3240。

现在让我们在 Linux 环境的 Windows 子系统中配置 USBIP 支持。确保映像中的内核版本至少为 5.10.60.1(我们的演示示例使用 WSL 2 和 Ubuntu 22.04 LTS 映像):

$ uname -a

现在您需要安装USB/IP工具和USB硬件ID库。

$ sudo apt install linux-tools-virtual hwdata
$ sudo update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20

[玩转系统] 将主机 USB 设备连接到 WSL 或 Hyper-V VM

在 Debian WSL 映像中使用以下命令:

$ sudo apt-get install usbip hwdata usbutils

在基于 rpm 的 WSL 映像中安装 USB/IP 工具 (CentOS/Oracle Linux):

$ sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
$ sudo rpm -ivh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
$ sudo yum install kmod-usbip
$ sudo yum install usbip-utils
$ sudo yum install hwdata

现在在 Windows 主机上打开提升的命令提示符并列出 USB 设备:

usbipd wsl list

如您所见,所有 USB 设备均未共享(Not Shared)。您可以通过 USB 设备的 BUSID 来共享该 USB 设备。在我的示例中,我希望将 BUISID 4-2 的 USB 海量存储设备传递到 WSL 中。

usbipd wsl attach --busid 4-2

[玩转系统] 将主机 USB 设备连接到 WSL 或 Hyper-V VM

  • 如果您使用 WSL 1(usbip 不支持),您将收到错误消息。

    sbipd: error: The specified WSL distribution is using WSL 1, but WSL 2 is required. Learn how to upgrade at https://docs.microsoft.com/windows/wsl/basic-commands#set-wsl-version-to-1-or-2.
  • 如果出现错误:

    usbipd: error: WSL kernel is not USBIP capable

    ,使用以下命令更新 WSL 系统:

    wsl --update

检查您的 USB 闪存驱动器是否已连接到 WSL:

$ dmesg | tail
$ lsusb

[玩转系统] 将主机 USB 设备连接到 WSL 或 Hyper-V VM

如果您想通过网络与另一台运行 Linux 的计算机共享您的 USB 设备(它可以是 Hyper-V 或任何其他虚拟机管理程序上具有 Linux 来宾的虚拟机),请首先列出远程 Windows 主机上的可用 USB 设备:

$ usbip list --remote=192.168.13.21

您现在可以通过 ID 挂载所需的 USB 设备:

$ sudo usbip attach -remote=192.168.13.21 --busid=4-2

在此示例中,指定了运行 usbipd-win 服务器的 Windows 主机的 IP 地址。

现在,您的 Linux 工具应该可以看到共享 USB 设备。

要在 Windows 中禁用 USB 设备共享:

usbipd wsl detach --busid 4-2

请注意,以这种方式连接的 USB 驱动器在 WSL 中不会被识别为块设备。使用lsblk命令检查这一点。事实上,WSL 内核没有 USB 驱动器的驱动程序(要添加它们,您必须重建内核)。

您将能够在 Linux 发行版上以标准方式挂载共享 USB 驱动器的文件系统。

因此,您必须使用以下命令在 WSL 中挂载外部 USB 闪存驱动器、软盘或 SD 卡:

$ sudo mkdir /mnt/f
$ sudo mount -t drvfs f: /mnt/f

[玩转系统] 将主机 USB 设备连接到 WSL 或 Hyper-V VM

WSL 挂载 FAT、ExFAT、Refs 或 NTFS 驱动器以及 VHD 映像。

因此,usbipd-win 可用于使用 USBOverIP 协议通过网络将物理 USB 设备从物理 Windows 主机传递到 WSL、虚拟机或 Linux 计算机。

您可能还会发现阅读有关如何将 WSL 移动到其他驱动器的文章很有用。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯