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

news/2025/1/13 14:19:09/文章来源:https://www.cnblogs.com/SkyXZ/p/18668531

老奶奶看了都会的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这个指令的时候大概率会出现如下报错来提示我们不具备下载的条件:

image-20250112000837745

        那我们到底该如何正确安装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会快很多)

image-20250112001704410

uname -r #查看当前系统的内核版本
git clone https://github.com/microsoft/WSL2-Linux-Kernel.git -b xxxxx #对应内核
unzip WSL2-Linux-Kernel-linux-msft-wsl-5.15.y.zip #如果是下载的先解压

image-20250112002404913

        接着我们安装一些必要的依赖

sudo apt install build-essential flex bison libssl-dev libelf-dev dwarves #编译内核所需的常见工具和库
sudo apt install libncurses-dev #libncurses-dev是一个开发库,用于在Linux系统上开发基于终端的用户界面(TUI)应用程序,它是ncurses库的开发版本,提供了编译和链接TUI应用程序所需的头文件和静态库文件,通过使用libncurses-dev,开发人员可以利用ncurses库的功能创建具有交互性和可视化效果的终端应用程序

        接着我们进入内核文件包使用如下命令来编辑内核配置文件:

cd WSL2-Linux-Kernel-linux-msft-wsl-5.15.y/
make menuconfig KCONFIG_CONFIG=Microsoft/config-wsl

PS:如果你的终端太小的话会报以下错误,解决方法很简单,把终端窗口拉大即可或者如果无法拉大的话可以采用下面给出的两个办法之一:

Your display is too small to run Menuconfig!
It must be at least 19 lines by 80 columns.
make[1]: *** [scripts/kconfig/Makefile:48: menuconfig] Error 1
make: *** [Makefile:627: menuconfig] Error 2
#method-1
#使用命令行设置配置,如果你无法调整窗口大小,可以使用以下命令直接启用默认配置,而不进入 menuconfig,该命令会基于 Microsoft/config-wsl 文件加载配置,然后通过命令行逐步询问新选项(如果有)
make KCONFIG_CONFIG=Microsoft/config-wsl oldconfig
#method-2
#尝试使用非交互式配置,即不需要手动调整配置,直接使用 defconfig 自动生成默认配置
make KCONFIG_CONFIG=Microsoft/config-wsl defconfig

        理论上来说运行完上述正确指令会出现如下窗口,我们选择进入 Device Drivers -> USB support -> Support for Host-side USB ,选中 USB Mass Storage support* 号是直接编译进内核,M 是编译为内核模块,内核模块需要手动加载),把下面弹出来的一堆驱动都选上,保存完之后就可以退出了:

image-20250112003435516

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

image-20250112004030858

        最后我们进入源码目录开始编译内核即可,编译完成的文件是bzImage文件,文件在arch/x86/boot/文件夹下

cd WSL2-Linux-Kernel-linux-msft-wsl-5.15.y
make -j$(nproc) bzImage KCONFIG_CONFIG=Microsoft/config-wsl

image-20250112005052488

        接着我们将这个内核文件拷贝到我们的宿主机里的用户目录下(C:\Users{username}),同时找到一个叫".wslconfig"的文件,如果没有的话那就自行创建一个,并把我们拷贝出来的内核文件的地址添加进文件里

[wsl2]
kernel=path\\to\\kernel #

image-20250112010420101

        接着我们打开CMD将WSL2关闭重启

wsl --shutdown

        接着重新打开我们的wsl2并输入以下指令即可完成对usbip的安装

sudo apt update
sudo apt install linux-tools-generic hwdata
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并运行以下命令并在弹出窗口点击安装即可(有些同学安装完成之后可能需要重启一下电脑)

winget install --interactive --exact dorssel.usbipd-win

image-20250112011903695

        接着我们使用如下命令即可看到当前宿主机的USB设备,

usbipd list   #查看当前宿主机的所有USB设备及其信息

image-20250112023050474

        然后我们使用如下命令即可将对应的设备挂载到WSL2设备上,但是要注意挂载到WSL2的设备宿主机将无法使用!!!

#启用
usbipd bind --busid <busid>   #绑定设备
usbipd attach --busid <busid> --wsl  #将设备挂载到WSL2
#禁用
usbipd unbind --busid <busid>	#解绑设备
usbipd attach --busid <busid>	#将设备附加到Win

image-20250112023707438

        最后我们在WSL2中检查一下设备是否已经挂载上,输入以下命令后可以发现设备已经成功挂载到我们的WSL2

lsusb #列出当前USB设备

image-20250112023814950

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/868645.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HighReport报表工具V4.0带来十大核心优势变化

1.概述经过一年时间产品升级研发,HighReport报表工具正式推出V4.0版本,报表算法和报表功能获得全面提升。HighReportV4.0带来全面质的飞跃,具有明显的产品优势。 2.亮点一:双父格扩展模型报表引擎核心算法是父子格扩展模型,下面是常见模型一般报表厂商下面的扩展模型是不支…

一个超经典 WinForm,WPF 卡死问题的终极反思

一:背景 1. 讲故事 写这篇文章起源于训练营里一位朋友最近在微信聊到他对这个问题使用了一种非常切实可行,简单粗暴的方式,并且也成功解决了公司里几个这样的卡死dump,如今在公司已是灵魂级人物,让我也尝到了什么叫反哺!对,这个东西叫 Harmony, github网址: https://gi…

nginx 简单实践:静态资源部署、URL 重写【nginx 实践系列之一】

本文为 nginx 简单实践系列文章之一,主要简单实践了两个内容:静态资源部署、重写,仅供参考。〇、前言 本文为 nginx 简单实践系列文章之一,主要简单实践了两个内容:静态资源部署、重写,仅供参考。 关于 Nginx 基础,以及安装和配置详解,可以参考博主过往文章: https://…

题解:AT_abc353_f [ABC353F] Tile Distance

[ABC353F] Tile Distance 题解 cnblogs 题目传送门:洛谷,Atcoder Solution 很恶心人的分类讨论题。 很显然走大格子大概率比走小格子快。 对终点和起点向上下左右枚举大格子,我们就把问题转化为给两个大格子 \((a,b)\)、\((c,d)\),求怎样走最快。 对角的大格子可以通过 \(2…

数字化转型中的项目管理优化:协作工具的优势与应用

一、企业数字化转型的背景与挑战 1.1 数字化转型的驱动力数字化转型是指企业通过采用数字技术、创新流程和业务模式,提升运营效率、创造新价值并优化客户体验。随着云计算、大数据、人工智能和物联网等技术的不断发展,数字化转型已成为企业实现长期竞争力和持续增长的重要战略…

rk3568屏幕抖动问题

问题描述:有时候操作屏幕界面,发现屏幕有抖动的情况。经跟RK原厂沟通,此问题跟给ddr供电的vdd_logic有关系。vdd_logic默认定义:vdd_logic: DCDC_REG1 {regulator-always-on;regulator-boot-on;regulator-min-microvolt = <500000>;regulator-max-microvolt = <13…

B@se-还原错误字母表转码的base64编码

题目: 密文:MyLkTaP3FaA7KOWjTmKkVjWjVzKjdeNvTnAjoH9iZOIvTeHbvD== JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs****kxyz012789+/oh holy shit, something is missing... 第一行是密文,有明显的Base64编码特征(等号结尾) 第二行是大小写字母、数字、+、/,有明显的…

打开浏览器Chrome跳转指定页面并全屏打开

办法来源于https://blog.csdn.net/shaofengzong/article/details/119928096 主要用于大屏数据可视化的项目,设置电脑自启动后,打开浏览器的同时默认跳转指定页面并全屏打开。、 办法通过增加谷歌浏览器的启动参数进行实现。 两种方式实现,需要根据需求进行选择默认全屏打开指…

板栗看板:让供应商全生命周期管理变得如此简单

供应商全生命周期管理(Supplier Lifecycle Management,SLM)是一个结构化、全流程的供应商闭环管理过程,旨在优化供应商关系,提高供应链的整体效率和可持续性。以下是对供应商全生命周期管理的详细阐述供应商全生命周期管理(Supplier Lifecycle Management,SLM)是一个结…

协作管理工具在多部门协作中的优势与应用

一、跨职能团队协作的挑战 跨职能团队的协作面临多个方面的挑战,这些挑战往往会影响团队的工作效率、项目的推进速度以及最终的项目质量。 1.1 信息传递不畅在跨职能团队中,成员来自不同的部门,各自拥有不同的背景、职责和目标。因此,团队成员之间的沟通可能不够顺畅,信息…

side channel

‌Side Channel‌,中文称为“边信道”,是指通过加密软件或硬件运行时产生的各种泄漏信息来获取密文信息的攻击方式。在狭义上,边信道攻击特指针对密码算法的非侵入式攻击,通过分析加密电子设备在运行过程中的边信道信息泄露来破解密码算法。常见的边信道攻击包括计时攻击、…

RocketMQ工具的使用方法

RocketMQ简介 启动rocketmq-Dashboard项目 输入 http://localhost:8888/#/ 即可到rocketmq界面 整体横向菜单分为八个部分:OPS(运维):主要是设置nameserver和配置vipchannel Dashboard(驾驶舱):控制台的dashboard,可以分别按broker和主题来查看消息的数量和趋势。 Cluster(…