编译自定义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

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

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

相关文章

一个Indie Hacker的微SaaS技术栈

如今,可用的技术非常多,我们每个月都会看到各种新的 JS 框架发布,有时,如果你一开始没有选择正确的技术堆栈,以后扩展起来就会很困难。因此,在今天的文章中,我将与你分享我用于开发微型 SaaS 的…

分布式存储ceph知识点整理

一、Ceph概述 如何选择存储 底层协议兼容性产品要有定位,功能有所取舍针对特定市场的应用存储被市场认可的存储系统 稳定性是第一位的性能第二数据功能要够用 一)存储分类 1、本地存储 本地的文件系统,不能在网络上用。 如:ext3、…

Python图像背景去除

目录 🎁库的导入 🎀库的安装 🎁rembg库去除背景 🎁效果 🎁文末彩蛋 今天来介绍一个特别有趣的python库,rembg库,全称是“Remove Background”的缩写,意为“去除背景”&#xff…

内存泄漏工具valgrind初使用

工具下载&#xff1a; sudo apt install valgrind简单使用流程&#xff1a; 编写源文件编译&#xff08;-g方式&#xff09;valgrind使用memcheck工具运行程序 编写文件&#xff1a; #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #i…

Github 2024-08-12 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-08-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3Java项目2JavaScript项目1TypeScript项目1Vue项目1Clojure项目1Dockerfile项目1HTML项目1C项目1Jupyter Notebook项目1Node.js最佳实…

【秋招笔试】2024-08-07-YT游戏(研发岗)-三语言题解(CPP/Python/Java)

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 本次的题目比较典,…

docker的swarm技术

docker中swarm技术 docker swarm技术是docker社区提供的docker的集群管理调度工具&#xff0c;通过api来管理多个主机上的docker&#xff0c;通过overlay网络来实现不同主机之间容器的通信与访问。实现容器的调度&#xff0c;资源的分配&#xff0c;以及副本。 docker swarm中…

Keepalived超详解,里面有你最爱看的Keepalived+LVS与Keepalived+HAProxy

文章目录 VRRPVRRP相关术语VRRP相关技术 keepalived介绍keepalived环境准备keepalived配置说明全局配置虚拟路由器配置开启通信功能启用keepalived日志实现独立子配置文件 keepalived企业应用实例抢占模式和非抢占模式非抢占模式延迟抢占模式 VIP单播模式keepalived通知脚本配置…

JVM知识总结(CMS收集器)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ CMS收集器 CMS&#xff08;Concurrent Mark Sweep&#xff09;收集…

14.3 Matplotlib与Seaborn数据可视化

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

tiktok 搜索接口请求与翻页

这几天有小伙伴问tk的搜索接口的问题, 一个是搜索热门接口请求返回 {“status_code”: 0},这个使用curl_cffi的requests库改一下指纹请求就行了。 再一个就是翻页问题 细心一些比对一下翻页参数都能做到的(小伙伴以为只改个offset就完事了) 要不然你只能得到这样的结果:…

音视频概要

YUV原理的讲解 YUV是一种常见的视频像素格式&#xff0c;经常用在视频编解码上面&#xff0c;YUV分别由Y分量和U、V分量(红色投影Cr)组成。Y分量指的是亮度分量&#xff0c;也就是我们经常说的灰阶值&#xff0c;相当于一副灰色的图像。而U分量和V分量表示的是色度分量&#x…

ThinkPHP5.0.15漏洞解析及SQL注入

第一步&#xff1a; 通过查看5.0.15和5.0.16版本的对比&#xff0c;可以看到16版本对在Builder.php里面对数据库的增减做了修正&#xff0c;所以可以15版本的漏洞就存在在这里。这里的代码用的拼接的方式&#xff0c;就可以尝试使用报错注入来实现。 第二步&#xff1a; 我们…

Selenium + Python 自动化测试09(多窗口切换)

我们的目标是&#xff1a;按照这一套资料学习下来&#xff0c;大家可以独立完成自动化测试的任务。 上一篇我们讨论了截图的操作方法&#xff0c;本篇文章我们讲述一下多窗口切换的操作方法。 在实际的测试项目组中我们可能会遇到多窗口的情况&#xff0c;有时候需要在不同窗口…

代理服务器在HTTP请求中的应用:Ruby实例

摘要 在现代互联网架构中&#xff0c;代理服务器是不可或缺的组件&#xff0c;它提供了访问控制、数据加密、缓存和匿名访问等多种功能。本文将介绍代理服务器的基本概念&#xff0c;并以Ruby编程语言为例&#xff0c;展示如何在HTTP请求中使用代理服务器&#xff0c;包括设置…

TS基础记录

ts配置文件的配置项有很多下面是一些常见的配置&#xff1a; { //这个ts的json可以写注释,用来指令哪些ts文件需要编译,/*任意文件,/**任意目录,./是当前目录 , // ../是父级目录,/是根目录&#xff08;表示一下子回到最顶端的那个文件夹下&#xff09; "include": […

Android 实现多进程通讯(如何实现多进程开发,Binder、AIDL)

目录 1&#xff09;为什么App需要多进程 2&#xff09;什么是多进程开发? 3&#xff09;如何实现多进程开发&#xff1f; 4&#xff09;跨进程间通讯(案例) 5&#xff09;多进程需要注意什么问题&#xff1f; 6&#xff09;多进程的底层原理是什么&#xff1f;【待写】 …

【Ajax使用说明】Ajax、Axios以及跨域

目录 一、原生Ajax 1.1 Ajax简介 1.2 XML简介 1.3 AJAX 的特点 1.3.1 AJAX的优点 1.3.2 AJAX 的缺点 1.4 AJAX 的使用 1.4.1AJAX的基本操作 1.4.2AJAX的传参 1.4.3 AJAX的post请求及设置请求体 1.4.4 AJAX响应json数据 1.4.5 AJAX请求超时与网络异常处理 1.4.5 AJ…

Ubuntu基础使用-适合新手的讲解

目录 一、基础操作 1. 终端重要热键 2. 基础命令 3. 通配符 二、文件与目录 1. 2.等价 3.帮助指令 4.当前路径 更改路径 5.创建与删除文件夹 6.创建与删除文件 7.重定向&#xff08;写入&#xff0c;追加写入&#xff09; 8.查看文件内容 9.wc指令 10.复制&…

Broken: Gallery靶机复现

靶机设置 靶机设置为NAT模式 靶机IP发现 nmap 192.168.112.0/24 靶机IP为192.168.112.142 目录扫描 dirsearch 192.168.112.142 访问浏览器 发现文件页面 查看后发现都没什么用 getshell hydra -L rockyou.txt -P rockyou.txt 192.168.112.142 ssh 尝试爆破ssh账号密码…