声明:本文教程来源于微软官网WSL教程,链接地址:Connect USB devices

最近在学OpenCV,发现微软的WSL是个好东西,结合VS Code编辑器,无论是C++还是Python方式学习,简直是绝配,Python最好用Anaconda安装,后续要再学习机器学习、神经网络之类,甚至再搭配给Cuda,完美!可以这么说,对于只有一台安装Win11的电脑的同学而言,WSL2+Anaconda+VS Code+OpenCV+Cuda是最快速、最佳体验环境搭建方案。ps:GUI(图形界面)很容易解决,sudo apt install gedit 安装个有图形界面的应用即可,wsl会自动配置好GUI。

下面进入正题。众所周知,WSL默认不支持USB设备,学习OpenCV怎能没有摄像头!我搜遍全网,发现Google上的教程基本都是教我们从微软的WSL的Github库下载代码,然后在本地自己编译,使能USB功能。这个方法已经被多次验证是可行的,但是太繁琐了,而且要消耗不少校园网流量。最后,我不断改变检索关键词,终于访问到了微软官方的教程。废话不多说,下面介绍具体教程,有英语阅读能力的还是尽量查看官方教程,官方教程比较详细,而且更新。

提前说明一下,如果想用wsl,实现OpenCV调用摄像机处理视频,有以下方法:

1. 直接使用录制好的视频,完全能够满足实验和测试了;

2. 使用网络摄像机,或者手机安装一个IP Camera,局域网内访问IP地址:端口能够正常使用的话,那OpenCV也可以直接使用,这个是最优方法,而且实测可行的。相关APP有很多,而且如果校园网开启了IP隔离,那就笔记本开个热点就行了。

3. 老老实实的重新编译WSL内核,使能USB摄像机驱动。

系统配置要求:

  • Win11 (版本号22000及以上,Win10请参考官方教程:Win10连接USB设备官方教程
  • 不支持Arm64设备,仅支持x64/x86架构
  • 系统已经成功安装好WSL2环境
  • wsl2的linux内核版本号5.10.60.1及以上,查看方法:linux命令行界面输入 uname -a

步骤:

安装usbipd-win(Windows环境中)

  1. 去Github上下载usbipd-win的release文件
  2. 选择.msi文件下载,如果浏览器报错误,选择相信该文件,双击运行安装即可
  3. 其它安装方式及解读等,请访问官方教程

安装USBIP工具(Linux环境中)

Windows环境中usbip工具安装完成后,还需要在Linux环境中进行配置。下面介绍Ubuntu系统中的配置,其它系统请参考官方教程。

在Ubuntu的bash(命令行)中,运行以下指令:

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

连接一个USB设备

工具配置好后,USB设备并没有被自动连接到WSL中,我们还需要手动进行连接。

注意:在连接USB设备前,需要确认打开的有一个WSL命令行界面,我们需要WSL2的VM环境是激活状态。

  1. 首先以管理员身份运行一个PowerShell命令行界面,然后输入以下命令:

    usbipd wsl list

  2. 选择你要连接的USB设备的BUSID值,然后在PowerShell中输入以下指令:

    usbipd wsl attach --busid <busid>   #注意,<busid>是一个整体,直接输入busid号就行,不要带<>

    需要注意的是,输入指令后,Ubuntu的bash命令行可能会提醒需要输入密码,因为此操作需要sudo权限。

  3. 然后就可以查看USB设备是否成功连接了,Ubuntu的bash中输入以下命令:

    lsusb

    未连接USB时:连接成功后: 可以看到,Camera已经连接到WSL中了。PowerShell中也显示Camera已经连接到Ubuntu了。

  4. 在 WSL 中使用完设备后,可以直接Windows弹出USB 设备或者直接拔掉,即从物理层面断开USB设备连接,也可以管理员模式下从 PowerShell 运行此命令:
    usbipd wsl detach --busid <busid>  #记得修改<busid>具体号码

注意事项:

  1. 每次关闭wsl或者与usb设备断开连接后,需要重新连接设备,有两种重新连接USB设备的方法:

    1. 上文介绍的,运行管理员模式PowerShell,usbipd命令连接;
    2. Ubuntu的bash界面连接,输入以下指令:
      usbip list -r $HOSTNAME.local     #查看已连接过的设备信息,如记得busid,该命令非必须执行命令
      sudo usbip attach -r $HOSTNAME.local -b <busid>  #连接USB设备,注意替换<busid>

  2. 更新linux-tools-*-generic最新版本方法:
    1. 创建一个脚本文件:

      #!/usr/bin/env bashrel="$(uname -r)"
      rel="${rel%%-*}"
      rel=(${rel//./ })function latest_linux_tools {apt-cache search linux-tools |awk -v cur_ver="${rel[*]}" '/^linux-tools([-\.][0-9]+)+-generic\>/ {ltg_package=$1gsub(/[^0-9]+/," ",$1);gsub(/^\s*/,"",$1);split($1,ltg_ver,/\s*/);split(cur_ver,cmp_ver,/\s*/)if (ltg_ver[1]<=cmp_ver[1] && ltg_ver[2]<=cmp_ver[2] && ltg_ver[3]<=cmp_ver[3]) {print ltg_package;}}' | sort -nr | head -n 1
      }# optional ...
      apt-get install "$@" "$(latest_linux_tools)"
    2. 按照以下命令执行:
      sudo nano /usr/local/bin/install_linux_tools_generic
      # 将上面的脚本内容复制到这个install_linux_tools_generic文件中
      # 修改文件权限
      sudo chmod u+x /usr/local/bin/install_linux_tools_generic# 先预览一下要最新版本的linux-tools-*-generic版本
      sudo install_linux_tools_generic -s# 如果有新版本,可以安装,执行下面指令
      sudo install_linux_tools_generic -y

    3. 参考资料来源:Connecting USB devices to WSL - Windows Command Line (microsoft.com)
  3. 由于usbipd-win未做摄像头支持,或者说wsl内无usb摄像头驱动,因此目前仅使用usbipd-win方式无法成功使用usb摄像头。我们需要在wsl中添加usb摄像头驱动,目前我所知的唯一成功方法是从github上下载wsl代码,然后本地自行编译,使能usb功能,然后打包自己所用usb摄像头的驱动。Built my own kernel, but can't get it to display as a video device · Issue #257 · dorssel/usbipd-win (github.com)OpenCV cannot find camera device in wsl2 · Issue #6211 · microsoft/WSL (github.com)
     

WSL2连接调用USB设备相关推荐

  1. USB Server——远程连接调用USB技术

    USB Server--企业USB Key远程管家 软件加密狗.网银U盾.认证UKey等各种USB设备在金融公司.大型集团公司.财务共享中心等办公场景应用广泛,这些设备在带来极大便利的同时也对传统的管 ...

  2. WSL2中使用usb设备 usbipd: error: WSL ‘usbip‘ client not correctly installed.

    当wsl2中使用usb设备时,必须先将其从windows挂到wsl中 首先在windows中安装usbipd-win. https://learn.microsoft.com/zh-cn/window ...

  3. 用python获取usb设备端口号,用Python查询连接的USB设备信息的简单方法?

    如何在Python中查询连接的USB设备信息? 我想得到UID设备名(例如:SonyEricsson W660),设备路径(例如:dev/ttyACM0) 此外,上述信息中的最佳参数是什么,以便在设备 ...

  4. android usb 检测工具,Android:如何检测已连接的USB设备?

    我正在尝试检测已连接到android的USB设备. 我知道有些动作可以检测USB何时连接或分离. 但是在将usb设备连接到android之后,我真的不知道如何检查设备. 此外,我发现每个USB设备都有 ...

  5. python调用usb设备_在Python中查询连接的USB设备信息的简单方法?

    我能想到像这样的快速代码. 由于所有USB端口都可以通过/ dev / bus / usb / / 对于生成的ID,即使您拔下设备并重新连接它[可能是其他端口].它会是一样的. import re i ...

  6. python调用usb设备_用Python与USB设备通信

    假设您使用Linux和libusb-1.0作为PyUSB的后端库.// Detach a kernel driver from an interface. // If successful, you ...

  7. 【WSL2】配置连接 USB 设备并使用主机的 USB 摄像头

    [WSL2]配置连接 USB 设备并使用主机的 USB 摄像头 1 概述 2 安装 USBIPD-WIN 3 在 Linux 中安装 USBIP 工具和硬件数据库 4 附加 USB 设备 1 概述 先 ...

  8. Android 连接USB设备(主机模式)

    Android 连接USB设备(主机模式) Android 连接USB设备(配件模式) 两种模式(主机.配件) 首先,要了解Android 连接USB设备主要通过两种模式, USB 配件模式. USB ...

  9. WSL2使用USB设备

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.WSL2是什么? 二.编译内核 1.查看自己的内核 2.准备工作 3.下载适合自己的内核版本 4.开始编译 4.使 ...

最新文章

  1. linux 切换python版本_Linux下python默认版本切换成替代版本(示例代码)
  2. MySQL 5.7---安装详细教程(.zip安装)
  3. python自己写包_Python将自己写的模块进行打包
  4. 4g模块注册上网 移远_Openwrt实现4G模块上网功能
  5. 对于Wannacry“永恒之蓝”病毒 查看自己电脑是否安全
  6. pythonsqlite3教程_使用 Python 在线操作 sqlite3
  7. React兄弟组件之间通信
  8. web页面 float定位导致“溢出现象”处理
  9. latex强调/重音符号
  10. 大规模集群故障处理,能抗住这3个灵魂拷问算你赢
  11. 02-MyBatis配置SQL打印
  12. 【itext学习之路】--4.给pdf增加文本水印和图片水印
  13. python面向对象编程从零开始_Python面向对象编程从零开始,从没对象到有对象
  14. Redis面试 - 如何保证 redis 的高并发和高可用?
  15. IAR编译器中函数智能提示
  16. K8S - 为 Docker 而生
  17. 有效管理云计算成本的多个措施
  18. DataGridView行号发生变化 使用的事件
  19. 谷歌云实现Google Drive无限空间离线下载(完美版)
  20. python可爱的小猫动画_菜根谭小猫

热门文章

  1. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第n次落地时,共经过多少米?第n次反弹多高?(以第十次为例)
  2. 数据分析京东笔记本电脑
  3. mysql入门第一章
  4. 博客相关 | 如何获取图片主题色并修改字体颜色
  5. word中自动生成的目录中,编号和文本间距过大
  6. 帝企鹅变形记:腾讯发展的秘密
  7. linux 4t磁盘格式化,Ubuntu 16.04系统挂载4T硬盘
  8. 滑动报错 Unable to preventDefault inside passive event listener due to target being treated as passive.
  9. 一个jar包冲突引起的StackOverflowError
  10. dbca silent方式建库