WSL已经成为了本人进行Linux开发的主力,使用起来非常方便。本文就来分享为WSL2添加UVC支持,这样方便直接在WSL中查看UVC设备。
这里使用WIN11+WSL2+Ubuntu22.04,开发环境参考文章:
https://mp.weixin.qq.com/s/7cqme7d8V1-0r2xm8BF2Dw?token=6568576&lang=zh_CN
基于WSL和玄铁官方仓库c-sky/buildroot构建玄铁CPU系统镜像
Windows下打开PowerShell,输入以下命令安装usbipd
winget install usbipd
输入usbipd list查看设备
我这里3-4接的是UVC设备
然后输入usbipd bind -b 3-4绑定该设备到usbipd
此时再输入usb ipd list查看,该设备状态就变为了shared
再输入usbipd attach -w -b 3-4将设备连接到WSL中去(注意此时WSL需要运行,即至少要先开一个WSL终端)
此时wsl中lsusb就可以看到该设备了
默认WSL2内核没有添加UVC支持,此时guvcview等工具不能使用。
下面就来重新编译替换内核来支持UVC。
Winodws下先更新WSL2
wsl --update
WSL2中安装依赖
sudo apt update && sudo apt upgrade -y && sudo apt install -y build-essential flex bison dwarves libssl-dev libelf-dev libncurses-dev pkg-config
WSL2中确认内核版本
uname -r
根据上述版本信息5.15.167.4下载对应的源码
cd /usr/src
TAGVERNUM=5.15.167.4 && TAGVER=linux-msft-wsl-${TAGVERNUM} && sudo git clone -b ${TAGVER} https://github.com/microsoft/WSL2-Linux-Kernel.git ${TAGVERNUM}-microsoft-standard && cd ${TAGVERNUM}-microsoft-standard
也可以直接下载对应的release版本源码
https://github.com/microsoft/WSL2-Linux-Kernel/releases/tag/linux-msft-wsl-5.15.167.4
我这里是直接下载WSL2-Linux-Kernel-linux-msft-wsl-5.15.167.4.tar.gz到/usr/src下
解压
sudo tar -xvzf WSL2-Linux-Kernel-linux-msft-wsl-5.15.167.4.tar.gz
cd WSL2-Linux-Kernel-linux-msft-wsl-5.15.167.4/
sudo cp /proc/config.gz config.gz && sudo gunzip config.gz && sudo mv config .config
sudo make menuconfig
找到如下配置按键Y选中对应的选项[*]
Device Drivers --->
< > Multimedia support ----
# Build WSL2 kernel with usb camera support
# menuconfig -> Device Drivers -> Multimedia support -> Filter media drivers
# -> Device Drivers -> Multimedia support -> Media device types -> Cameras and video grabbers
# -> Device Drivers -> Multimedia support -> Video4Linux options -> V4L2 sub-device userspace API
# -> Device Drivers -> Multimedia support -> Media drivers -> Media USB Adapters -> USB Video Class (UVC)
# -> Device Drivers -> Multimedia support -> Media drivers -> Media USB Adapters -> UVC input events device support
# -> Device Drivers -> Multimedia support -> Media drivers -> Media USB Adapters -> GSPCA based webcams
Save保存再Exit
保存到了当前目录的.config
使用新的配置构建
sudo make -j$(nproc) KCONFIG_CONFIG=.config && sudo make modules_install -j$(nproc) && sudo make install -j$(nproc)
编译好的内核位于当前目录下vmlinux
复制内核到windows下,复制到自己的WSL的安装目录即可。
sudo cp vmlinux /mnt/d/WSL/Ubuntu2204-221101/Ubuntu_2204.1.7.0_x64
指定内核
Users/用户名,目录下添加文件.wslconfig
以下是在WSL中添加,直接在windows下添加该文件也可以的。
nano /mnt/c/Users/qinyu/.wslconfig
添加如下内容(ctrl+o是保存,ctrl+x是退出)
[wsl2]
kernel=D:\\WSL\\Ubuntu2204-221101\\Ubuntu_2204.1.7.0_x64\\vmlinux
重新打开wsl,查看内核替换是否成功
PowerShell中
wsl --shutdown
usbipd list
usbipd attach -w -b 3-4
WSL中
lsusb
uname -r -v
看到编译时间是否正确即可确认是否正确加载了新编译的内核。
sudo apt install v4l-utils guvcview
运行
sudo guvcview
默认选择设备
/dev/video0
可以在video Controls下选择设备和配置参数
luvcview依赖libsdl,先安装libsdl
sudo apt-get install libsdl1.2-dev
下载安装包
wget https://snapshot.debian.org/archive/debian/20120423T215716Z/pool/main/l/luvcview/luvcview_0.2.6-6_amd64.deb
安装
sudo dpkg -i luvcview_0.2.6-6_amd64.deb
运行
sudo luvcview
以上分享了WSL2中支持UVC的详细配置过程,基于WSL2进行linux开发还是非常方便的。