编译自定义Linux内核,使WSL支持访问Windows下USB设备

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

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

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

  1. usbipd (USB/IP daemon):服务端,负责共享连接到主机的 USB 设备。
  2. 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 设备。

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

  1. 编译自定义 Linux 内核,以支持特定的 USB 驱动程序
  2. 或者单独编译安装 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 支持相关的选项:

1. sudo make menuconfig

选择以下内核选项:

  1. Device Drivers -> USB Support
  2. Device Drivers -> USB Support -> USB announce new devices
  3. Device Drivers -> USB Support -> USB Modem (CDC ACM) support
  4. Device Drivers -> USB Support -> USB/IP
  5. Device Drivers -> USB Support -> USB/IP -> VHCI HCD
  6. Device Drivers -> USB Support -> USB/IP -> Debug messages for USB/IP
  7. Device Drivers -> USB Serial Converter Support
  8. Device Drivers -> USB Serial Converter Support -> USB FTDI Single port Serial Driver

截图.png

使用多线程编译内核

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

配置 WSL 使用自定义内核
将生成的内核镜像复制到 Windows 中,并在 .wslconfig 文件中指定该内核:

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

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

1. [wsl2]
2. 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

参考:
连接 USB 设备
WSL support
Connecting USB devices to WSL
让 WSL 2 支持 USB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值