当前位置: 首页 > news >正文

Windows Subsystem for Linux——使用宿主机器上的摄像头

大纲

  • 安装系统
  • 定制内核
    • 修改Multimedia support
      • Media device types
      • Video4Linux options
      • Media drivers
        • GSPCA based webcams
    • USB support
      • Support for Host-side USB
      • USB/IP support
    • 保存设置
    • 编译
    • 安装
    • 保存Kernel
    • 启用Kernel
  • Windows端共享Camera
    • 安装usbipd
    • 查找摄像头BUSID
    • 共享状态
    • 附加到WSL
  • Ubuntu端查看摄像头
  • 测试
    • Install the latest stable version of Mesa driver in Ubuntu
    • 安装视频软件
  • 参考资料

即使我们使用《Windows Subsystem for Linux——安装桌面版Ubuntu》中的方法,在远程连接时共享所有视频捕获设备
在这里插入图片描述
也不会让我们在Ubuntu子系统中看到任何摄像头(如/dev/video0之类)
在这里插入图片描述
这就需要我们定制WSL Kernel Linux。

安装系统

我们将《Windows Subsystem for Linux——定制WSL2-Linux-Kernel》中的环境按照《Windows Subsystem for Linux——安装多个相同的操作系统》中介绍的方法打包成了Ubuntu-24.04-New-WSL-Kernel-Base基础环境,这样我们后面可以基于此做很多实验。

 wsl --export Ubuntu-24.04-New-WSL-Kernel Ubuntu-24.04-New-WSL-Kernel-Base

然后以此为基础,构建Ubuntu-24.04-New-WSL-Kernel-Camera实例。

wsl --import Ubuntu-24.04-New-WSL-Kernel-Camera .\Ubuntu-24.04-New-WSL-Kernel-Camera Ubuntu-24.04-New-WSL-Kernel-Base

然后登陆系统

wsl -d Ubuntu-24.04-New-WSL-Kernel-Camera -u fangliang

定制内核

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

通过上面的命令,我们进入定制的对话框。
在这里插入图片描述
在这个界面中,在有—>行,使用回车键会进入子项目;按“空格键”,会出现M或者“*”。“M"表示Module,”*“表示built-in。我们需要后续的模块尽量都是built-in的,所以相应选项处按两次“空格键”,让其变成”*"状态。

修改Multimedia support

按“回车键”进入Device Drivers—>,找到Multimedia support—>,按两次“空格键”使其变成"*“状态。
在这里插入图片描述
然后按回车键进入其子项目。
找到“Filter media drivers”和“Autoselect ancillary drivers (tuners, sensors, i2c, spi, frontends)”,将它们设置为”*"状态。
在这里插入图片描述

Media device types

进入Media device types —>
找到“Cameras and video grabbers (NEW)”,将它设置为"*"状态。
在这里插入图片描述
按两次ESC键,退到上一层目录。

Video4Linux options

进入Video4Linux options —>

按两次ESC键,退到上一层目录。

Media drivers

进入Media drivers —>
找到“Media USB Adapters”,将它设置为"*"状态。
在这里插入图片描述
按回车键进入Media USB Adapters子项。
找“GSPCA based webcams”和“USB Video Class (UVC)”,将它们设置为"M"状态。
在这里插入图片描述

GSPCA based webcams

然后进入“GSPCA based webcams —> ”,勾选摄像头驱动。由于我也不知道我是哪款摄像头,就全勾选了。
在这里插入图片描述

USB support

退到Device Drivers子项目下,找到“USB support”,进入其子项。

Support for Host-side USB

在这里插入图片描述

USB/IP support

将“USB/IP support”下相关的选项设置为"*"状态。
在这里插入图片描述

保存设置

退到最外一层,按Tab键切换到“Save”高亮,然后按“回车键”。
在这里插入图片描述
在这里插入图片描述
保存设置。
再按Tab键,切换到Exit,退出设置页面。

编译

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

安装

sudo make modules_install headers_install

保存Kernel

mkdir /mnt/c/vmlinux/
sudo cp vmlinux /mnt/c/vmlinux/

启用Kernel

到Windows系统中,用户目录下创建一个叫.wslconfig的文件(%USERPROFILE%.wslconfig)
填入以下内容,kernel所指向的就是上一步编译结果在Windows上的副本

[wsl2]
kernel=C:\\vmlinux\\vmlinux

然后在Powershell中关闭WSL

wsl --shutdown

登录系统,要保持登录状态,这样后续指令才能找到这台实例。

wsl -d Ubuntu-24.04-New-WSL-Kernel-Camera -u fangliang

安装后续要用的工具

sudo apt install linux-tools-generic hwdata

Windows端共享Camera

安装usbipd

在Powershell中安装usbipd

winget install usbipd

查找摄像头BUSID

然后查看当前usb设备

usbipd list	

在这里插入图片描述
可以看到,我们笔记本电脑集成的摄像头是1-7。这个编号后面会用到。

共享状态

在附加 USB 设备之前,必须使用命令 usbipd bind 来共享设备,从而允许它附加到 WSL。

 usbipd bind --busid 1-7

附加到WSL

usbipd attach --wsl --busid 1-7

在这里插入图片描述

Ubuntu端查看摄像头

进入Ubuntu终端中执行

sudo apt install usbutils
lsusb

在这里插入图片描述
可以看到摄像头已经存在了。

 ls /dev/video*

在这里插入图片描述
设备也存在了。

测试

Install the latest stable version of Mesa driver in Ubuntu

sudo add-apt-repository ppa:kisak/kisak-mesa
sudo apt update
sudo apt upgrade

安装视频软件

sudo chmod 777 /dev/video0
sudo apt install v4l-utils guvcview mesa-utils

运行

sudo guvcview -d /dev/video0

参考资料

  • https://www.youtube.com/watch?v=t_YnACEPmrM
  • https://learn.microsoft.com/en-us/windows/wsl/connect-usb
  • https://learn.microsoft.com/zh-cn/windows/wsl/connect-usb#attach-a-usb-device
  • https://itsfoss.com/install-mesa-ubuntu/

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 浅学爬虫-处理复杂网页
  • 等保测评练习卷22
  • 1.面试准备篇
  • 微信小程序教程009:条件渲染
  • 项目实战——外挂开发(30小时精通C++和外挂实战)
  • IDEA切换分支,会影响当前在跑的项目吗?
  • 【计算机网络】网络基础概念
  • 敏感信息泄露wp
  • 基于距离的多指标决策——TOPSIS
  • 配置frp实现内网穿透(.toml配置文件)
  • 基于python的百度迁徙迁入、迁出数据分析(六)
  • springboot学习笔记第一天
  • CF962 E. Decode
  • 「实战应用」如何用DHTMLX将上下文菜单集成到JavaScript甘特图中(四)
  • Python爬虫技术 第27节 API和RESTful服务
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • CSS盒模型深入
  • Invalidate和postInvalidate的区别
  • JS字符串转数字方法总结
  • ng6--错误信息小结(持续更新)
  • Octave 入门
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Vue组件定义
  • yii2中session跨域名的问题
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 简单数学运算程序(不定期更新)
  • 离散点最小(凸)包围边界查找
  • 前端技术周刊 2019-01-14:客户端存储
  • 如何编写一个可升级的智能合约
  • 算法之不定期更新(一)(2018-04-12)
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # Panda3d 碰撞检测系统介绍
  • #define与typedef区别
  • (11)MSP430F5529 定时器B
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (SpringBoot)第二章:Spring创建和使用
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (九)One-Wire总线-DS18B20
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (数据结构)顺序表的定义
  • (转)Oracle存储过程编写经验和优化措施
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net FrameWork简介,数组,枚举
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .Net6 Api Swagger配置
  • .NET实现之(自动更新)
  • .NET是什么