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

即使我们使用《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

参考资料

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

breaksoftware

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值