编译WSL内核,用于操作usb读卡器

wsl2默认不能操作usb读卡器,但是对于嵌入式linux开发来说,需要经常对tf卡进行操作,随时都会使用到usb读卡器的访问。下面讲述如何开启wsl2的usb读卡器的访问,主要涉及到以下2个步骤:

  • wsl2本质是一个虚拟机,无法直接访问宿主主机的USB设备。
  • wsl2的内核没有加入USB存储设备的驱动。

一、开启wsl2的usb识别

  • 1.1、windows安装 USBIPD-WIN 项目(官方指导教程)

    • ① 转到 usbipd-win 项目的最新发布页。

    • ② 选择 .msi 文件,点击后会进行下载。
      在这里插入图片描述

    • ③ 运行下载的 usbipd-win_x.msi 安装程序文件。

    下载完后点击安装就好,安装完后还会要求你重启电脑。

  • 1.2、wsl2下安装 USBIP 工具和硬件数据库

    sudo apt install linux-tools-generic hwdata
    sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*-generic/usbip 20
    

    如果安装失败,先执行sudo apt update,再进行安装。

  • 1.3、attach usb设备到wsl2
    在attach USB 设备之前,请确保 WSL 命令行已打开。

    • ① 通过以管理员模式打开 PowerShell 并输入以下命令,列出所有连接到 Windows 的 USB 设备:
    usbipd wsl list
    

    如下:
    在这里插入图片描述

    • ② 选择要attach 到 WSL 的设备总线 ID,然后运行此命令:
    usbipd wsl attach --busid <busid>
    

    如下:
    在这里插入图片描述

    • ③ 打开 wsl2,使用以下命令列出附加的 USB 设备:
    lsusb
    

    如下:
    在这里插入图片描述

  • 1.4、从wsl2 detach usb设备
    在wsl2中完成设备使用后,可物理断开 USB 设备,或者在管理员模式下从 PowerShell 运行此命令:

    usbipd wsl detach --busid <busid>
    

此步执行完成后,虽然能识别到usb设备了,但是并没有创建块设备节点(/dev/sd*)。下面的操作就是用来解决这个问题。

二、开启wsl2的usb存储设备驱动

这部分需要重新编译wsl2的内核,开启内核的usb存储设备驱动,编译后进行内核替换。

  • 2.1、首先到wsl2的内核仓库中获取一份内核源码:

    git clone https://github.com/microsoft/WSL2-Linux-Kernel.git
    

    或直接下载zip文件,比较快:
    在这里插入图片描述

  • 2.2、解压源码:

    unzip WSL2-Linux-Kernel-linux-msft-wsl-5.15.y.zipcd WSL2-Linux-Kernel-linux-msft-wsl-5.15.y
    
  • 2.3、使用以下命令来配置内核配置:

    make menuconfig KCONFIG_CONFIG=Microsoft/config-wsl
    
  • 2.4、进入 Device Drivers -> USB support -> Support for Host-side USB ,选中 USB Mass Storage support( * 号是直接编译进内核,M 是编译为内核模块,内核模块需要手动加载),把下面弹出来的一堆驱动都选上,保存完之后就可以退出了。
    在这里插入图片描述

  • 2.5、执行以下命令开始编译内核:

    make -j$(nproc) bzImage KCONFIG_CONFIG=Microsoft/config-wsl
    

    编译完成的内核是bzImage文件,和我们编译时指定的名称一致,文件在arch/x86/boot/文件夹下。

  • 2.6、把编译好的内核复制出来,放在 Windows 的用户目录(默认是 C:\Users\{username})下创建一个名为 .wslconfig 的文件,内容根据 微软官方文档 来:

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

    以下是我的配置:
    在这里插入图片描述

  • 2.7、检查新内核是否生效
    重启wsl2,使用以下命令来查看内核版本号:

    uname -a
    

    对比下显示的日期是否和编译日期一样。

三、wsl2访问usb读卡器

  • 3.1、usbipd-win的使用,方法也是参考的微软官方文档。
    管理员方式打开powershell:
    # 将usb从windows接入到wsl,此时windows端会断开
    usbipd wsl list
    usbipd wsl attach --busid <busid>
    
  • 3.2、wsl2访问usb
    # 查看usb接入情况
    lsusb
    # 查看内核日志
    dmesg# 查看对于的块设备节点
    ls /dev/sd*
    
  • 3.3、使用完成之后,断开usb
    # 此命令执行完成后,usb将从wsl断开,windows端会接入
    usbipd wsl detach --busid <busid>
    

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

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

相关文章

面试问题--文件IO

文件 I/O 操作在 C 语言中的使用 在 C 语言中&#xff0c;文件 I/O&#xff08;Input/Output&#xff09;操作是处理文件的重要部分。本文将介绍一些常见的文件 I/O 操作及其使用示例。 打开和关闭文件 1.打开文件&#xff1a; fopen() 函数用于打开一个文件。 FILE *fpt…

Postman关闭自动更新程序

Postman 是目前使用到的最简洁的一个 api 测试工具&#xff1b;但是自动 v10.14 版本开始&#xff0c;分组管理功能必须登录才能使用&#xff0c;而国内登录有存在很多问题&#xff1b; 解决方案 从v10.14版本开始&#xff0c;使用分组功能必须登录&#xff0c;而在 v10.14 之…

fastadmin列表文字显示太长,设置宽度和鼠标停留显示文字

直接在对应的js中字段中显示&#xff1a; {field: remark, title: __(Remark), operate: false,formatter : function(value, row, index, field){return "<span styledisplay: block;overflow: hidden;text-overflow: ellipsis;white-space: nowrap; title" ro…

C++作业5

完成沙发床的多继承&#xff08;有指针成员&#xff09; 代码&#xff1a; #include <iostream>using namespace std;class Bed { private:double *money; public:Bed(){cout << "Bed::无参构造函数" << endl;}Bed(double money):money(new doub…

【Latex笔记】标题页

整体结构 模板结构如下&#xff1a; \documentclass{book} % 导言区&#xff0c;加载宏包和各项设置&#xff0c;包括参考文献、索引等 \usepackage{makeidx} % 调用makeidx 宏包&#xff0c;用来处理索引 \makeindex % 开启索引的收集 \bibliographystyle{plain} % 指定参考…

通过软骨鱼SaaS打造高效跨境独立站托管平台

在互联网信息爆炸的今天&#xff0c;拥有一个专属的独立站点是每个跨境商家的需求。然而&#xff0c;传统的跨境建站服务常常因为复杂的操作和高昂的成本而让人望而却步。 那么&#xff0c;有没有一种方式&#xff0c;可以让我们快速、便捷、低成本地实现跨境建站呢&#xff1…

010 数据结构_红黑树

前言 本文将会向你介绍红黑树的概念、性质&#xff0c;以及如何手撕红黑树 1 文章重点 文本首先引入红黑树的概念和性质&#xff0c;性质非常重要对于后面的插入操作来说&#xff0c;文章的核心放在了插入部分&#xff0c;另外看插入部分之前记得看声名和节点的定义哦~ 2 引…

嵌入式门槛高吗?

今日话题&#xff0c;嵌入式门槛高吗&#xff1f;在嵌入式领域&#xff0c;门槛因公司和职位的不同而异。普通的嵌入式岗位门槛相对较低&#xff0c;通常要求掌握一些C语言编程和单片机相关知识&#xff0c;可以制作简单的电子产品&#xff0c;但相应的工资较低。然而&#xff…

解决Flutter运行报错Could not run build/ios/iphoneos/Runner.app

错误场景 更新了IOS的系统版本为最新的17.0, 运行报以下错误 Launching lib/main.dart on iPhone in debug mode... Automatically signing iOS for device deployment using specified development team in Xcode project: GN3DCAF71C Running Xcode build... Xcode build d…

PG 常用维护性 SQL

文章目录 查看哪些角色对表有增删改查权限查看哪些角色对函数有执行权限根据序列名获取表及列信息查看postgresql数据库用户系统权限、对象权限查看所有主键及其相关字段信息查看 排除主键索引之外的 其他所有唯一性约束与唯一索引给 data 用户授予 create publication 权限统计…

典型的ETL使用场景

典型的ETL使用场景 ETL( Extract&#xff0c;Transform&#xff0c;Load)是一种用于数据集成和数据转换的常用技术。它主要用于从多个数据源中提取数据&#xff0c;对数据进行清洗、转换和整合&#xff0c;最后加载到目标系统中。ETL 的使用场景非常广泛&#xff0c;下面将介绍…

力扣labuladong一刷day28天二叉树

力扣labuladong一刷day28天二叉树 文章目录 力扣labuladong一刷day28天二叉树一、104. 二叉树的最大深度二、144. 二叉树的前序遍历三、543. 二叉树的直径 一、104. 二叉树的最大深度 题目链接&#xff1a;https://leetcode.cn/problems/maximum-depth-of-binary-tree/ 思路&a…

R语言中如何改变表格数据的填充顺序

#搬运过来的&#xff0c;看不懂请看原出处 原作者&#xff1a; 熊荣川 六盘水师范学院生物信息学实验室 xiongrongchuan126.com http://blog.sciencenet.cn/u/Bearjazz 通常在R语言中矩阵&#xff08;表格&#xff09;数据的填充默认顺序为先列后行&#xff0c;从左到右。…

Theamleaf导出pdf模版编写(原始th/td编写表格)

需求&#xff1a;简单的theamleaf编写表格就是简单的th/td&#xff0c;新需求是导出的模版是学员table表&#xff0c;每个项目的学员数量是不定的&#xff0c;所以用到 <tr th:each"item,start:${studentList}"> 所有代码&#xff1a; <!DOCTYPE html>…

python 实现 AIGC 大模型中的概率论:生日问题的基本推导

在上一节中&#xff0c;我们对生日问题进行了严谨的阐述&#xff1a;假设屋子里面每个人的生日相互独立&#xff0c;而且等可能的出现在一年 365 天中的任何一天&#xff0c;试问我们需要多少人才能让某两个人的生日在同一天的概率超过 50%。 处理抽象逻辑问题的一个入手点就是…

【华为OD题库-057】MELON的难题-java

题目 MELON有一堆精美的雨花石(数量为n&#xff0c;重量各异)&#xff0c;准备送给S和W。MELON希望送给俩人的雨花石重星一致&#xff0c;请你设计一个程序帮MELON确认是否能将雨花石平均分配。 输入描述 第1行输入为雨花石个数:n&#xff0c;0<n <31. 第2行输入为空格分…

单片机实现数码管动态显示

动态显示的特点是将所有位数码管的段选线并联在一起&#xff0c;由位选线控制是哪一位数码管有效。这样一来&#xff0c;就没有必要每一位数码管配一个锁存器&#xff0c;从而大大地简化了硬件电路。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码…

vmware_ubuntu_双向拷贝问题

vmware 中 ubuntu 系统与 Host 机无法双向拷贝 在 vmware workstation 中最小化安装好 ubuntu 20.04 后&#xff0c;开机后发现无法将 Host 机中拷贝的内容粘贴到 ubuntu 中。 实践搜索到的方案&#xff1a;https://blog.csdn.net/luobeihai/article/details/123885756&#…

【bash指令全集合】最全教程-持续更新!

作者&#xff1a;20岁爱吃必胜客&#xff08;坤制作人&#xff09;&#xff0c;近十年开发经验, 跨域学习者&#xff0c;目前于新西兰奥克兰大学攻读IT硕士学位。荣誉&#xff1a;阿里云博客专家认证、腾讯开发者社区优质创作者&#xff0c;在CTF省赛校赛多次取得好成绩。跨领域…

Centos7.4安装nginx1.24.0_安装详细步骤---Linux工作笔记066

以前安装的太模糊了,干脆重新写一个: 1.首先下载对应的nginx-1.24.0.tar.gz安装文件 2.然后: 去执行命令 安装依赖 yum install -y gcc yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel 3.然后:去解压 tar -zxvf ngi…