找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 709|回复: 0

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

[复制链接]
发表于 2025-8-2 13:44:10 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
转载来源: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拓展并安装

8f4a583386e94af2beb9f5ce61fe4a18.png

3.打开ubuntu

9e9072f39e184beeb5ba57a66b019acc.png

连接成功:

29d753a39875420386ce9cad9461f1a1.png

打开终端

d7ab3f55f8e34820a122a0d7be97e2d8.png

1290be85c164478a8e2695f2f92bb3b1.png

说明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
b3d2d9c378e54ceea25f447fde3b5283.png

需要重启电脑!!!

重启电脑
后输入以下命令
usbipd list
d6c0bbdf4b2848f6bbafed9f89b57004.png

说明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,以管理员身份打开

3ee15352545b4d6c90e6e158748ca3ea.png

然后输入以下命令
usbipd list
d6c0bbdf4b2848f6bbafed9f89b57004 (1).png

发现ST-Link设备

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

注意:

命令执行成功后 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拓展

7b1255b12cf34223a378ab7c0e4d4df0.png

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

53ab66bcab784a51a0d471c1de0a0de9.png

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

733f4c77b89a4516960ac75afea8747f.png

成功:

36cdb5f4c9754364aff786c44ac3b1ab.png

Ubuntu环境下使用lsusb查询
lsusb
db4e0335e23b429c986a44d65662247d.png

如果报错:

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.

8908f98f169a4a22870fc7aac91e8adf.png

这个错误就代表你没有将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
然后将以下代码输入
[boot]
systemd=true
65f4293f4c044d8bb848d9af250843df.png

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

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

905bb436d1674b71a1b6fecf1ee09ad2.png

然后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
3ec69974db75493a8d96762d8c62405a.png

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

52fa89b281c5430f8f5026e7667b6da6.png

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

2e47246c4ebb45cd84ef99b9c45e814d.png

fb553d6fe39942869b3a2f3dbffa16ef.png

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

0908b06e2674467f8df3be95b586d540.png

终端输入命令将所有规则加入
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

3b3198abc8eb4634958167d3721c3e61.png

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

0ff9cb9bd4684503952a2612760673ad.png

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

126fd243d8e24c338507251f8791c104.png

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

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

3a1a21f8e1c24070a46122a0f46de0ff.png

插入JLink,将JLink状态改为Shared

8aee03105dfd44d6ac49da875c1249bf.png

将设备Attach到ubuntu上

16d5b592766948539b8af9c81de9d410.png

Ubuntu查询是否有Jlink

ea8ed669a6d246148f6e51dab42450a1.png

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

6d40240ede954c6e905acbd7b2e84ac8.png

如果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
回复

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2025-9-24 19:53 , Processed in 0.037242 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表