惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
J
Java Code Geeks
I
InfoQ
V
Visual Studio Blog
M
MIT News - Artificial intelligence
H
Help Net Security
博客园_首页
Blog — PlanetScale
Blog — PlanetScale
F
Fortinet All Blogs
Apple Machine Learning Research
Apple Machine Learning Research
人人都是产品经理
人人都是产品经理
G
Google Developers Blog
A
About on SuperTechFans
腾讯CDC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Last Week in AI
Last Week in AI
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
云风的 BLOG
云风的 BLOG
S
SegmentFault 最新的问题
WordPress大学
WordPress大学

博客园 - scott_h

win+linux 搜索工具 道客巴巴 ,文库等 文档下载 (下载图片,再插入WORD,转PDF) VMware 启动问题 Linux insmod 和 modprobe区别 windows 删除驱动 SSD 测试开发 查询本地IPV6 地址 从windows 自动进入BIOS 瑞芯微 RV1106G 硬件参考设计分享,包括原理图、PCB文件以及设计指南 全志性能非常强悍的 A733 SoC 硬件参考设计资料分享 Ubuntu Desktop 22.04 禁用自动更新 repo GDDR DDR 内存中的纠错码 (ECC) 功耗计算 leveldb 缓存后再批量写入 dmesg info smbios info cpphttplib 调用失败记录 解决firefox 无法访问证书过期的网站
深入WSL与USB:教你如何编译 Linux 内核支持 USB 共享 repo
scott_h · 2025-08-25 · via 博客园 - scott_h

深入WSL与USB:教你如何编译 Linux 内核支持 USB 共享

https://cyrus-studio.github.io/blog/posts/深入wsl与usb教你如何编译-linux-内核支持-usb-共享/

深入WSL与USB:教你如何编译 Linux 内核支持 USB 共享
阅读量:
Aug 2, 2025

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/

前言

WSL 本身并不支持连接 USB 设备,因此你需要安装开源 usbipd-win 项目。

usbip 可以让你在网络上共享和使用 USB 设备。它由两个主要组件组成:

    usbipd (USB/IP daemon):服务端,负责共享连接到主机的 USB 设备。

    usbip (USB/IP client):客户端,允许其他计算机访问共享的 USB 设备。

1. 安装USBIPD-WIN

USBIPD-WIN 是一个在 Windows 上实现 USB/IP 协议的工具。首先,你需要在 Windows 上安装这个工具。

下载并安装 usbipd-win,可以从GitHub页面获取最新版本的安装包。

或者执行下面命令安装

winget install usbipd

2. 列出所有可以共享的USB设备

usbipd list

3. 共享设备

在附加 USB 设备之前,必须使用命令 usbipd bind 来共享设备,从而允许它附加到 WSL( 需要管理员权限)。

usbipd bind --busid 2-6

这里的 2-6 是 USB 设备对应的 BUSID

4. 将USB设备连接到WSL

使用 usbipd attach 命令将指定的USB设备附加到WSL实例中。

usbipd attach --wsl --busid 2-6

打开 Ubuntu(或首选的 WSL 命令行),使用以下命令列出附加的 USB 设备

lsusb

你应会看到刚刚附加的设备,并且能够使用常规 Linux 工具与之交互。

5. 安装USBIP

在 WSL 环境下,usbip 允许你在 Linux 子系统中访问连接到 Windows 主机的 USB 设备。

可通过以下两种方式之一实现:

    编译自定义 Linux 内核,以支持特定的 USB 驱动程序

    或者单独编译安装 usbip 模块

5.1 编译自定义Linux内核

安装编译内核所需的依赖项

sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev autoconf libudev-dev libtool bc

下载内核源代码,通过 uname -r 命令查看 Linux 内核版本,checkout 对应的版本

git clone https://github.com/microsoft/WSL2-Linux-Kernel.git
cd WSL2-Linux-Kernel
git checkout linux-msft-wsl-5.15.153.1

将当前内核配置复制到新环境中

cp /proc/config.gz config.gz
gunzip config.gz
mv config .config

复制完成后可以通过 ls -al 命令查看当前目录所有文件,检查是否复制成功

使用 menuconfig 菜单选择需要的内核功能(也可以通过修改.config文件实现),特别是 USB 支持相关的选项

sudo make menuconfig

选择以下内核选项:

    Device Drivers -> USB Support

    Device Drivers -> USB Support -> USB announce new devices

    Device Drivers -> USB Support -> USB Modem (CDC ACM) support

    Device Drivers -> USB Support -> USB/IP

    Device Drivers -> USB Support -> USB/IP -> VHCI HCD

    Device Drivers -> USB Support -> USB/IP -> Debug messages for USB/IP

    Device Drivers -> USB Serial Converter Support

    Device Drivers -> USB Serial Converter Support -> USB FTDI Single port Serial Driver

word/media/image1.png
无标题-1

使用多线程编译内核

sudo make -j 8 && sudo make modules_install -j 8 && sudo make install -j 8

配置 WSL 使用自定义内核

将生成的内核镜像复制到 Windows 中,并在 .wslconfig 文件中指定该内核

cp arch/x86/boot/bzImage /mnt/e/usbip-bzImage

然后编辑 /mnt/c/Users/<user>/.wslconfig 文件,添加以下内容

[wsl2]
kernel=E:\\usbip-bzImage

通过以上步骤,WSL 2 将使用你自定义编译的内核来支持额外的驱动程序,特别是 USB 相关的功能。

重启 wsl 使配置生效

wsl --shutdown

5.2 编译 USBIP 工具

安装编译内核所需的依赖项

sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev autoconf libudev-dev libtool bc

编译 USBIP 工具

cd tools/usb/usbip
sudo ./autogen.sh
sudo ./configure
sudo make install -j 12

将 USBIP 工具库复制到 USBIP 可以访问到的位置

sudo cp libsrc/.libs/libusbip.so.0 /lib/libusbip.so.0

7. 卸载USB设备

如果需要卸载设备,可以使用以下命令

# 卸载挂载
usbipd detach --busid 2-6
# 取消设备共享
usbipd unbind --busid 2-6
  1. USB挂载快捷方式
编写一个 wsl_usb_attach.bat 脚本,每次需要挂载 USB 到 WSL 中时只需要点击以下脚本就可以了。

@echo off
REM Check if the script is run as an administrator
net session >nul 2>&1
if %errorLevel% == 0 (
    echo Running as administrator
) else (
    echo Please run this script as an administrator!
    pause
    exit /B 1
)

REM Run the usbipd commands
usbipd list
usbipd bind --busid 2-6
usbipd attach --wsl --busid 2-6

echo Commands executed successfully!
pause

由于 usbipd bind 命令需要以管理员身份执行,所有可以给脚本创建一个快捷方式,右键【属性】【快捷方式】【高级】【用管理员身份运行】,实现点击快捷方式直接以管理员身份运行。

word/media/image2.png
无标题

相关链接:

连接 USB 设备

WSL support

Connecting USB devices to WSL

让 WSL 2 支持 USB