Ubuntu 20.04 上的 Microsoft LifeCam VX-7000

Ubuntu 20.04 上的 Microsoft LifeCam VX-7000

我正在尝试让 USB 网络摄像头与 Ubuntu 配合使用。当我插入网络摄像头时,我短暂地看到网络摄像头上亮起蓝灯。

lsusb显示以下内容:

Bus 002 Device 063: ID 045e:0723 Microsoft Corp. LifeCam VX-7000 (UVC-compliant)

dmesg显示以下内容:

[2723272.317364] usb 2-1.2: new high-speed USB device number 63 using ehci-pci
[2723272.453639] usb 2-1.2: New USB device found, idVendor=045e, idProduct=0723, bcdDevice= 1.00
[2723272.453647] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[2723272.453651] usb 2-1.2: Product: Microsoft® LifeCam VX-7000
[2723272.453655] usb 2-1.2: Manufacturer: Microsoft
[2723272.455421] uvcvideo: Found UVC 1.00 device Microsoft® LifeCam VX-7000 (045e:0723)
[2723272.459065] uvcvideo: UVC non compliance - GET_DEF(PROBE) not supported. Enabling workaround.
[2723272.459442] uvcvideo: Failed to query (129) UVC probe control : -32 (exp. 26).
[2723272.459450] uvcvideo: Failed to initialize the device (-5).

我看不到目录/dev/video*,并且没有相机应用程序可以运行(Cheese、guvcview、VLC、Facebook Messenger)。

v4l2-ctl --list-devices返回以下内容:

Cannot open device /dev/video0, exiting.

对于下一步该尝试什么有什么想法吗?

答案1

首先,我要说的是,我对 Linux 一窍不通。我正在学习,多亏了 WSL2,学习起来容易一些。话虽如此,以下步骤在您阅读时可能正确,也可能不正确。我在 Windows 10 WSL2 系统上安装了同样的摄像头和 Linux 发行版。我无法让这个摄像头工作,因为虽然计算机可以看到它,Linux 发行版也可以看到它,但我的发行版中没有安装正确的驱动程序。我从来没有得到过/dev/video0设备,但我可以在所有正常的 Linux 设备位置看到该设备。我用来修复此问题的两个来源是:

在继续之前,请确保您已在 Windows 10 操作系统上安装了以下应用程序:

以下是我所采用的步骤,结合了上述来源:

  1. 通过运行 确保 WSL 完全是最新的wsl --update。如果有任何可用更新并已安装,请确保在wsl --shutdown继续之前使用 关闭 WSL。
  2. 如果您已经设置了 WSL 发行版,请运行wsl --list --verbose以查看它们的列表及其状态。
  3. 如果你已经有了想要使用的 WSL 发行版,请执行以下命令来备份当前内核,其中当前发行版是你想要使用的 Linux 发行版(WSL 的默认发行版是 Ubuntu,在上一步中找到),临时路径是保存 TAR 备份的位置,以及 TAR 的名称(显示默认名称),wsl --export <current-distro> <temporary-path>\wsl2-usbip.tar
  4. 现在导入相同的 TAR 文件作为新内核的基础,wsl --import wsl2-usbip <install-path> <temporary-path>\wsl2-usbip.tar其中安装路径是您希望保存新发行版的位置,临时路径是您刚刚创建的位置和 TAR。
  5. 通过运行来运行新导入的发行版wsl --distribution wsl2-usbip --user <user>,其中用户是您想要用于此发行版的用户名(您不会长时间使用此发行版,不用担心)
  6. 当你的新 WSL2 发行版启动并运行后,你可能需要重新启动之前使用的命令或终端窗口。Windows 终端是一个很好的例子,说明您需要在导入步骤之后执行此操作。
  7. 重新启动控制台或终端后,按顺序执行以下步骤,并确保在新的 wsl2-usbip 发行版中执行它们:
  • sudo apt update && sudo apt upgrade -y
  • sudo apt install -y build-essential flex bison libgtk2.0-dev libelf-dev libncurses-dev autoconf libudev-dev libtool zip unzip v4l-utils libssl-dev python3-pip cmake git iputils-ping net-tools -y
  • sudo apt install dwarves -y

这将安装完成内核构建所需的所有依赖项。矮人被添加作为对此处指出的潜在问题的答案StackOverflow 问题。这对您来说可能是可选的。


现在,从现在开始,您需要更加注意发出的命令,因为许多命令都需要您提供特定于发行版和设备组件的参数。以下步骤均在 Linux 发行版中完成。

  1. 运行uname -r以获取当前内核。在撰写本文时,我正在使用5.10.102.1-微软-标准-WSL2所以我会在命令中使用它。你需要知道这一点,所以请准备好它。
  2. 您最终可能会收到一条警告,提示您需要其他工具才能完成以下过程。如果是这样,请执行 usbipd-win WSL 设置部分顶部的 linux-tool 和 update-alternatives 步骤:
  3. sudo apt install linux-tools-virtual hwdata
  4. sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*/usbip 20
  5. 在您的新发行版中,发出以下命令,git clone https://github.com/microsoft/WSL2-Linux-Kernel.git
  6. 其次是,cd WSL2-Linux-Kernel
  7. 最后,git checkout <current-kernel>
  8. 完成后,运行cp /proc/config.gz config.gz复制配置。
  9. 下一个,gunzip config.gz
  10. 最后,运行mv config .config

下一步将重点介绍内核的配置菜单。配置菜单非常难导航,因为有很多项目,有些是嵌套的,而且没有按字母顺序排列。我会尝试引导您找到某个项目的位置。我知道有一个搜索选项,但我无法让它工作。

  • 所有菜单选项均使用上下箭头键浏览列表
  • 左右箭头可更改底行选择
  • 空格键进行选择。
  • < Exit >并不意味着退出整个配置,除非您位于内核配置主页上。退出二级菜单将使您返回上一级。
  • 任何带有 的选择都--->代表二级菜单选项。
  • 如果--->前面有一个选择框 ( [ ]),则该项目的二级菜单将不会出现,直到您选择该项目。
  1. 在你的发行版中,仍在 WSL2-Linux-Kernel 文件夹中,输入sudo make menuconfig
  2. 选择Device Drivers --->靠近底部的位置。
  3. 选择[*] USB support并进入其二级菜单。
  4. 向下滚动USB Physical Layer drivers并进入其二级菜单。
  5. 选择< > NOP USB Transceiver Driver-><M> NOP USB Transceiver Driver
  6. 返回Device Drivers --->菜单,您将能够通过配置窗口顶部的蓝色标题知道您已退出。
  7. 向下滚动并选择[ ] Multimedia support->[M] Multimedia support并进入其二级菜单。
  8. 选择[ ] Media USB Adapters-> [*] Media USB Adapters,进入其二级菜单。
  9. 选择< > USB Video Class (UVC)-><M> USB Video Class (UVC)并进入其二级菜单(如果我没记错的话)。
  10. 选择[*] UVC input events device support
  11. 使用右箭头键将底部选择移动到< Save >按钮并将其保留为.配置

如果你还想在内核中启用其他项目,请立即启用。我尝试了此页的第 4-4 节,但注意到许多条目已经内置。因此这些文章被弃用。但它们填补了此过程中的一些缺失空白,至少对于此网络摄像头而言,我希望这可以节省您和其他人的时间。我们现在快完成了。


通过选择退出配置文件直到< Exit >返回到您的发行版。

  1. 输入getconf _NPROCESSORS_ONLN即可打印出可用的核心数。
  2. 输入以下行,将#上一步中的 3 替换为处理器的数量:sudo make -j # && sudo make modules_install -j # && sudo make install -j #
  3. 现在去做个三明治或者看场节目吧,因为这可能需要一段时间(前提是它不会失败)。
  4. “make” 过程完成后,我们仍然需要从菜单中运行以下命令WSL2-Linux-Kernel#字符应该替换为步骤 1 中的数字:
  • cd tools/usb/usbip
  • sudo ./autogen.sh
  • sudo ./configure
  • sudo make install -j #
  1. 运行以下命令复制工具,sudo cp libsrc/.libs/libusbip.so.0 /lib/libusbip.so.0

  2. sudo apt-get install hwdata如果还没有安装usb.ids,请安装它。

  3. 将图像复制到我们的 Windows 机器上的一个位置,cp arch/x86/boot/bzImage /mnt/c/Users/<user>/usbip-bzImage确保<user>用 Windows 10 配置文件的根目录替换(必须保存在那里但不记得为什么)。

  4. 最后,在与新内核相同的目录中创建一个名为.wslconfigor 的新文件wsl.config并编辑它

  5. 在里面添加以下内容,<user>再次替换为您的 Windows 用户名。所有斜线都应为双斜线。

    [wsl2]

    kernel=c:\\users\\<user>\\usbip-bzImage

  6. 只要配置和内核都位于您的配置文件文件夹的根目录中,您的发行版就应该使用该内核而不是原始内核来启动。


要确认它是否正常工作,请uname -r从发行版内部再次运行。现在您应该会看到+内核末尾添加了一个。您可能会注意到您的计算机有点迟缓。这是由于 make 进程将内容存储在系统内存中。您可能会看到进程 vmmem 以接近 5GB 的速度运行。要解决此问题,请重新启动终端窗口或重新启动计算机。

我希望这对你有用。请原谅我对答案过程、Linux 过程或英语过程的任何无知。我在搜索这个问题时发现了这一点,我希望这个答案虽然迟了,但可以帮助某人继续前进。

相关内容