佪眸一笑 發表於 2024-4-25 10:32:00

WSL(Ubuntu)连接 Windows 的 USB 设备(完结)

<h2 id="前言">前言</h2>
<p>最近使用 Linux 通过串口与设备通信,之前使用 Linux 都是在 VMware 里创建虚拟机,该平台下若有串口通信需求,有专门的按键功能切换很方便。<br>
但切换了 WSL2 (windows 的 linux 子系统,配置很方便)后,因为是纯命令行操作,就带来了点串口通信的麻烦。<br>
目前 WSL2 官方没有提供相应的命令行来设置串口通信(WSL1 支持)。但总有大佬出来解决问题,所谓大佬栽树,我乘凉。</p>
<h2 id="安装-package">安装 package</h2>
<p>两个安装方法,自选,我选的是第二个。</p>
<ul>
<li>github 获取,安装 usbipd-win 项目。</li>
<li>也可使用 Windows 程序包管理器程序 (winget) 来安装 usbipd-win 项目。 如果已安装 winget,只需使用命令 <code>winget install --interactive --exact dorssel.usbipd-win</code> 安装 usbipd-win 即可。 如果省略了 <code>--interactive</code>,winget 可能会立即重启计算机(如果这是安装驱动程序所必需的操作)。
<ul>
<li>这将安装:</li>
<li>名为 usbipd 的服务(显示名称:USBIP 设备主机)。 可使用 Windows 中的“服务”应用检查此服务的状态。</li>
<li>命令行工具 usbipd。 此工具的位置将添加到 PATH 环境变量。</li>
<li>名为 usbipd 的防火墙规则,用于允许所有本地子网连接到服务。 可修改此防火墙规则以微调访问控制。</li>
</ul>
</li>
</ul>
<h2 id="附加-usb-设备">附加 USB 设备</h2>
<ol>
<li>
<p>以 <em>管理员模式</em> 打开 PowerShell 和 WSL2 (也就是 Windows 和 WSL2 的终端)。<br>
<img src="https://images.cnblogs.com/cnblogs_com/blogs/792762/galleries/2391207/o_240425024941_image.png" alt="alt text" loading="lazy"></p>
</li>
<li>
<p>在 PowerShell 里输入 <code>usbipd list</code> 把接到 windows 上的 USB 设备列出来,方便看 USB-id(后面命令需要用到)。<br>
<img src="https://images.cnblogs.com/cnblogs_com/blogs/792762/galleries/2391207/o_240425025318_image.png" alt="alt text" loading="lazy"></p>
</li>
<li>
<p>在附加 USB 设备之前,必须使用命令 <code>usbipd bind</code> 先共享设备(必须要做),从而允许它附加到 WSL2。运行命令后,再次使用命令 usbipd list 验证设备是否已共享。(后面的设备状态变成 <em>Shared</em>)<br>
<img src="https://images.cnblogs.com/cnblogs_com/blogs/792762/galleries/2391207/o_240425025628_image.png" alt="alt text" loading="lazy"></p>
</li>
<li>
<p>然后就可以附加 USB 设备了(注意,只要 USB 设备连接到 WSL,Windows 将无法使用它)。使用命令 <code>usbipd attach --wsl -b 2-1</code> 附加 USB 设备,附加到 WSL2 后,WSL2 运行的分发版本(也就是你 WSL 安装的 linux 系统,我的是 Ubuntu )可以使用 USB 设备。 使用 <code>usbipd list</code> 验证设备是否已附加。<br>
<img src="https://images.cnblogs.com/cnblogs_com/blogs/792762/galleries/2391207/o_240425030011_image.png" alt="alt text" loading="lazy"></p>
</li>
<li>
<p>在 WSL 中检查下是否正常附加上 USB 设备,使用 <code>lsusb</code> 命令列出附加的 USB 设备。运行一个使用到 USB 串口的 RUST 程序,可以正常运行说明可以了。<br>
<img src="https://images.cnblogs.com/cnblogs_com/blogs/792762/galleries/2391207/o_ea87f342.png" alt="alt text" loading="lazy"><br>
应该可以看到刚刚附加的设备,并且能够使用常规 Linux 工具与之交互。根据你的应用程序,可能还需要配置 udev 规则以允许非根用户访问设备。</p>
</li>
<li>
<p>WSL 中完成设备使用后,在 PowerShell(Windows) 里 <code>usbipd detach --busid &lt;busid&gt;</code> 物理断开 USB 设备,才能在 Windows 里使用这个 USB 设备(这个是微软推荐的做法)。或者粗暴点,直接把设备拔了,重新插一下,效果也一样。但是不知道有没有啥负面影响(目前还没发现)。</p>
</li>
</ol>
<h2 id="参考">参考</h2>
<ul>
<li>微软 WSL 使用说明</li>
<li>wsl2 支持 usb 串口</li>
</ul><br><br>
来源:https://www.cnblogs.com/likkoliu/p/18157046
頁: [1]
查看完整版本: WSL(Ubuntu)连接 Windows 的 USB 设备(完结)