0xAA55 发表于 2025-8-2 13:44:10

【转载】使用WSL2+usbipd,解决ST-Link JLink无法被WSL直接识别问题

转载来源:https://blog.csdn.net/godmial/article/details/149854149
原作者:Sean_woo1998
转载已经过原作者授权。

本文解决了WLS2与ST-Link,JLink等下载器之间的不能通信的问题
WSL 版本: 2.5.9.0
内核版本: 6.6.87.2-1
WSLg 版本: 1.0.66
MSRDC 版本: 1.2.6074
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.26100.1-240331-1435.ge-release
Windows: 10.0.26100.4652

一.安装ubuntu

1.将ubuntu安装到D盘

将ubuntu安装到非C盘位置,这篇文章写的非常好,我就不浪费时间了

【Linux】自定义WSL2安装位置,安装到其他磁盘(非C盘)_wsl2安装到其他盘-CSDN博客

2.vscode安装WSL插件来使用Ubuntu

安装完成之后打开vscode,打开拓展搜索WSL拓展并安装



3.打开ubuntu



连接成功:



打开终端





说明Ubuntu安装成功

二.安装usbipd

usbipd是一个运行在 Windows 上的后台服务,基于 USB/IP 协议,用于将本地 USB 设备虚拟化并共享给 WSL2、虚拟机或远程 Linux 系统,使这些系统能够像本地设备一样访问和使用这些 USB 外设。简单来说这一步就是为了将插到win主机上的USB设备共享到WSL

1.win环境安装usbipd

win环境下打开cmd,输入以下命令```
winget install --interactive --exact dorssel.usbipd-win
```

需要重启电脑!!!

重启电脑后输入以下命令```
usbipd list
```

说明usbipd安装完成

2.ubuntu环境安装usbipd

以防万一,先更新一下ubuntu,全部输入Y即可```
sudo apt update
sudo apt upgrade
```安装usbipd```
sudo apt install linux-tools-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*-generic/usbip 20
```3.将USB共享给WSL
1.把ST-Link或者Jlink插到电脑上

2.win+s键打开搜索栏输入power shell,以管理员身份打开



然后输入以下命令```
usbipd list
```

发现ST-Link设备

然后输入以下命令, 1-11对应stlink的BUSID```
usbipd bind --busid 1-11
```

注意:

命令执行成功后 ST-Link的状态会更改为Shared,然后才可以往下进行,

要注意以下两点

1.主机开关机可能会改变ST-Link或JLink的BUSID

2.更换USB插口也会改变ST-Link或JLink的BUSID

3.如果BUSID更换,那么状态就会改为Not shared,那么就要重新执行usbipd bind --busi <你的BUSID>,让状态改为Shared。

4.win环境vscode安装usbipd拓展



安装完成vscode左下角会有Attach字样



把ST-Link或者Jlink插到电脑上,然后点击 Attach



成功:



Ubuntu环境下使用lsusb查询```
lsusb
```

如果报错:

Error while attaching USB device:Error: Command failed: usbipd.exe attach --wsl --busid=1-1 usbipd: error: Device is not shared; run 'usbipd bind --busid 1-1' as administrator first.



这个错误就代表你没有将USB设备改为 Shared,请退回第三章第三节重新设置

三.启用systemd

在WSL Ubuntu中启用 systemd 的作用是使 WSL 环境具备与原生 Linux 系统一致的服务管理能力,从而支持如 cron、docker、snapd、udev 等依赖 systemd 的服务和工具,提升兼容性与自动化运维能力。当然主要是udev,如果不启用systemd,则不能使用udev,则用户将无法正常访问USB设备,必须使用sudo或是使用chmod命令更改权限之后用户才能使用,非常不方便

官方说明:Use systemd to manage Linux services with WSL | Microsoft Learn

ubuntu环境下命令行输入```
sudo nano /etc/wsl.conf
```然后将以下代码输入```

systemd=true
```

按Ctrl+X退出,按Y确定保存

验证 WSL 中systemd是否已经成功启用```
ps -p 1 -o comm=
```如果返回的是:```
systemd
```说明systemd是系统的 init 进程,已经启用。



然后ubuntu就可以添加udev规则了

四.添加udev规则

规则文件用于告诉 Linux,当系统识别到特定的 USB 设备(例如调试器)时,应该采取哪些自动化操作。它们通常会为这些设备分配合适的访问权限(如允许普通用户读写),决定是否创建符号链接(例如 /dev/stlink),以及是否将设备归属到特定的用户组(如 plugdev)。添加了规则文件之后,普通用户可以直接访问指定usb设备,而不再需要sudo或者是chmod,大大降低了开发的繁琐性。

pyocd官方仓库:pyocd/pyOCD: Open source Python library for programming and debugging Arm Cortex-M microcontrollers

首先克隆pyocd仓库```
git clone https://github.com/pyocd/pyOCD.git
```

进入udev目录找到以下规则文件



然后将整个udev文件夹拖到ubuntu的home/user文件夹里去





Ubuntu进入到刚刚复制进来的udev目录里



终端输入命令将所有规则加入```
sudo cp *.rules /etc/udev/rules.d
```然后输入以下命令重新触发udev```
sudo udevadm control --reload
sudo udevadm trigger
```此时,如果以上步骤都全部成功的话,JLink或者ST-Link与WSL ubuntu之间的通道已经全部打通,我们还需要在Ubuntu中下载JLink验证一下是否成功

五.验证是否成功

JLink下载网站:SEGGER - The Embedded Experts - Downloads - J-Link / J-Trace



下载完毕之后还是放到home/user里边去



输入命令:```
sudo dpkg -i JLink_Linux_V856_x86_64.deb
```这时候会报错



这是依赖缺失的错误,此时执行自动安装需要的依赖包```
sudo apt install -f
```然后重新输入:```
sudo dpkg -i JLink_Linux_V856_x86_64.deb
```

查看是否安装成功,输入JLink 再按下两次Table键,是否如下所示



插入JLink,将JLink状态改为Shared



将设备Attach到ubuntu上



Ubuntu查询是否有Jlink



输入命令连接JLink下载器```
JLinkExe
```成功:



如果ubuntu能显示usb但是连接失败,检查udev规则是否导入成功

参考文章:

连接 USB 设备 | Microsoft Learn

WSL2连接USB存储设备(保姆级教程,真正做到你奶奶来了也能成功) - 知乎

Getting Started Guide — Zephyr Project Documentation

WSL 2.5.7.0: getting WSL kernel is not USBIP capable error · Issue #12984 · microsoft/WSL

在win10-wsl2(ubuntu)中安装jlink_jlink windows-CSDN博客

Use systemd to manage Linux services with WSL | Microsoft Learn
页: [1]
查看完整版本: 【转载】使用WSL2+usbipd,解决ST-Link JLink无法被WSL直接识别问题