【转载】使用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]