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

2023-12-04 23:36

本文主要是介绍编译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>
    

这篇关于编译WSL内核,用于操作usb读卡器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/455312

相关文章

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Redis中管道操作pipeline的实现

《Redis中管道操作pipeline的实现》RedisPipeline是一种优化客户端与服务器通信的技术,通过批量发送和接收命令减少网络往返次数,提高命令执行效率,本文就来介绍一下Redis中管道操... 目录什么是pipeline场景一:我要向Redis新增大批量的数据分批处理事务( MULTI/EXE

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)

《JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)》本文介绍了如何在Windows系统上配置多版本JDK(以JDK8和JDK17为例),并通过图文结合的方式给大家讲解了详细步骤,具有... 目录第一步 下载安装JDK第二步 配置环境变量第三步 切换JDK版本并验证可能遇到的问题前提:公司常