老奶奶看了都会的WSL2连接USB设备教程!

打印 上一主题 下一主题

主题 780|帖子 780|积分 2350

老奶奶看了都会的WSL2-Ubuntu连接USB设备教程!

作者:SkyXZ
CSDN:SkyXZ~-CSDN博客
博客园:SkyXZ - 博客园
参考资料:微软官方文档连接 USB 设备 | Microsoft Learn
        在Win11上用WSL2安装Ubuntu来开发简直不要太爽!!!但是很多小搭档会发现,欸~为什么我在宿主机上插入的USB设备Ubuntu怎么辨认不到啊!?这时很多小搭档拿出浏览器kuku一通搜索就会知道,原来是因为WSL2运行的是一个虚拟化环境,并不能直接访问宿主机(Windows)的硬件资源,这时大部分的教程 or GPT都会给出一个方法,那就是下载安装usbip这个包,但是当你运行sudo apt install usbip这个指令的时候大概率会出现如下报错来提示我们不具备下载的条件:

        那我们到底该如何精确安装usbip这个库呢?同砚们请继续往下看,我们之所以不具备这个包的安装条件就是因为这个包的支持依赖于Linux的某些内核模块,而我们WSL2的内核并不直接支持这些模块,那么本着见着拆招的头脑我们只要把缺少的内核重新装上加入 USB 存储设备支持不就好啦?顺着这个思路我们找到WSL2的内核仓库microsoft/WSL2-Linux-Kernel: The source for the Linux kernel used in Windows Subsystem for Linux 2 (WSL2)接着我们将我们需要的内核源码克隆到我们的WSL2-Ubuntu中(很大,直接下载拖进Linux会快很多)
  1. uname -r #查看当前系统的内核版本
  2. git clone https://github.com/microsoft/WSL2-Linux-Kernel.git -b xxxxx #对应内核
  3. unzip WSL2-Linux-Kernel-linux-msft-wsl-5.15.y.zip #如果是下载的先解压
复制代码

        接着我们安装一些必要的依赖
  1. sudo apt install build-essential flex bison libssl-dev libelf-dev dwarves #编译内核所需的常见工具和库
  2. sudo apt install libncurses-dev #libncurses-dev是一个开发库,用于在Linux系统上开发基于终端的用户界面(TUI)应用程序,它是ncurses库的开发版本,提供了编译和链接TUI应用程序所需的头文件和静态库文件,通过使用libncurses-dev,开发人员可以利用ncurses库的功能创建具有交互性和可视化效果的终端应用程序
复制代码
        接着我们进入内核文件包使用如下命令来编辑内核配置文件:
  1. cd WSL2-Linux-Kernel-linux-msft-wsl-5.15.y/
  2. make menuconfig KCONFIG_CONFIG=Microsoft/config-wsl
复制代码
PS:假如你的终端太小的话会报以下错误,办理方法很简单,把终端窗口拉大即可大概假如无法拉大的话可以采用下面给出的两个办法之一:
  1. Your display is too small to run Menuconfig!
  2. It must be at least 19 lines by 80 columns.
  3. make[1]: *** [scripts/kconfig/Makefile:48: menuconfig] Error 1
  4. make: *** [Makefile:627: menuconfig] Error 2
  5. #method-1
  6. #使用命令行设置配置,如果你无法调整窗口大小,可以使用以下命令直接启用默认配置,而不进入 menuconfig,该命令会基于 Microsoft/config-wsl 文件加载配置,然后通过命令行逐步询问新选项(如果有)
  7. make KCONFIG_CONFIG=Microsoft/config-wsl oldconfig
  8. #method-2
  9. #尝试使用非交互式配置,即不需要手动调整配置,直接使用 defconfig 自动生成默认配置
  10. make KCONFIG_CONFIG=Microsoft/config-wsl defconfig
复制代码
        理论上来说运行完上述精确指令会出现如下窗口,我们选择进入 Device Drivers -> USB support -> Support for Host-side USB ,选中 USB Mass Storage support( * 号是直接编译进内核,M 是编译为内核模块,内核模块需要手动加载),把下面弹出来的一堆驱动都选上,生存完之后就可以退出了:

        即选择这几个便可以啦,其他的选项视自己的需求选择,假如不确定的话也可以全部勾选上,选择完成之后我们生存退出即可

        末了我们进入源码目录开始编译内核即可,编译完成的文件是bzImage文件,文件在arch/x86/boot/文件夹下
  1. cd WSL2-Linux-Kernel-linux-msft-wsl-5.15.y
  2. make -j$(nproc) bzImage KCONFIG_CONFIG=Microsoft/config-wsl
复制代码

        接着我们将这个内核文件拷贝到我们的宿主机里的用户目录下(C:\Users{username}),同时找到一个叫".wslconfig"的文件,假如没有的话那就自行创建一个,并把我们拷贝出来的内核文件的地址添加进文件里
  1. [wsl2]
  2. kernel=path\\to\\kernel #
复制代码

        接着我们打开CMD将WSL2关闭重启
  1. wsl --shutdown
复制代码
        接偏重新打开我们的wsl2并输入以下指令即可完成对usbip的安装
  1. sudo apt update
  2. sudo apt install linux-tools-generic hwdata
  3. sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*-generic/usbip 20
复制代码
        至此我们便完成了Ubuntu上usbip的安装,接着我们在Windows上安装usbip,由于微软在Windows 10及更高版本已原生支持USB/IP,因此我们只需要用管理员身份打开Windows PowerShell并运行以下命令并在弹出窗口点击安装即可(有些同砚安装完成之后大概需要重启一下电脑)
  1. winget install --interactive --exact dorssel.usbipd-win
复制代码

        接着我们使用如下命令即可看到当前宿主机的USB设备,
  1. usbipd list   #查看当前宿主机的所有USB设备及其信息
复制代码

        然后我们使用如下命令即可将对应的设备挂载到WSL2设备上,但是要留意挂载到WSL2的设备宿主机将无法使用!!!
  1. #启用
  2. usbipd bind --busid <busid>   #绑定设备
  3. usbipd attach --busid <busid> --wsl  #将设备挂载到WSL2
  4. #禁用
  5. usbipd unbind --busid <busid>        #解绑设备
  6. usbipd attach --busid <busid>        #将设备附加到Win
复制代码

        末了我们在WSL2中检查一下设备是否已经挂载上,输入以下命令后可以发现设备已经成功挂载到我们的WSL2
  1. lsusb #列出当前USB设备
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

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

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

来自云龙湖轮廓分明的月亮

金牌会员
这个人很懒什么都没写!

标签云

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