集成网络摄像头几秒钟后停止工作

集成网络摄像头几秒钟后停止工作

在过去的几个小时里,我一直在尝试让我的集成网络摄像头(我的 Dell E7470 笔记本电脑)适用于 Skype 等应用程序。

问题:

每次启动后,摄像头都能正常工作,但启动视频应用程序后只能工作几秒钟(约 30 秒)。之后,任何应用程序(包括cheese)都无法找到摄像头,直到我重新启动。

粘贴板

粘贴箱(抱歉,没有足够的代表来提供多个链接)

工作时:

  • ls /dev/video0显示相机在那里

  • v4l2-ctl --info输出结果如下:pastebin(第一部分)

  • hwinfo | grep video输出结果如下:pastebin(第二部分)

当它不工作时:

  • ls /dev/video0给出:cannot access '/dev/video0': No such file or directory

  • v412-ctl --info给出Failed to open /dev/video0: No such file or directory

  • hwinfo | grep video输出结果如下:pastebin(第三部分)

我尝试过的:

  1. 检查我的网络摄像头是否受 Ubuntu 支持。在戴尔网站和 UVC 网站上进行了检查,得出结论它应该可以工作。
  2. 检查是否有任何 Fn + F_Key 组合可以启用/禁用我的网络摄像头。似乎没有。
  3. 安装驱动程序:sudo apt-get install cheese build-essential linux-headers- uname -r
  4. 尝试过:rmmod uvcvideo && modprobe uvcvideo
  5. 尝试了解决方案 #9这里,通过改变一行/etc/default/grub(也尝试放在iommu=soft后面quiet splash

抱歉,我合并了 pastebin,但我的声誉不足以发布超过 2 个链接。任何有关如何解决此问题的帮助都将不胜感激!

编辑1:

过了一会儿,集成摄像头断开连接我发现这个问题四年多前也出现过。执行此操作sudo rmmod uvcvideo && sudo modprobe uvcvideo似乎可以让它恢复运行几秒钟(我忘了用 sudo 执行此命令,所以之前它什么都没做),但之后又失败了……有没有人解决过这个问题?

顺便说一下,rmmod / modprobe 技巧只管用了几次。之后它就完全不起作用了,直到我重新启动。

编辑2:

这是摄像头出现故障时 /var/log/kern.log 中的调用跟踪:

Jun  5 10:54:21 me kernel: [  219.778042] CPU: 0 PID: 2455 Comm: cheese Not tainted 4.8.0-53-generic #56~16.04.1-Ubuntu
Jun  5 10:54:21 me kernel: [  219.778043] Hardware name: Dell Inc. Latitude E7470/0T6HHJ, BIOS 1.13.4 02/07/2017
Jun  5 10:54:21 me kernel: [  219.778044]  0000000000000286 000000002daf03ef ffff8d9e4be93b98 ffffffff9082e7b3
Jun  5 10:54:21 me kernel: [  219.778045]  ffff8d9e4be93be8 0000000000000000 ffff8d9e4be93bd8 ffffffff9048314b
Jun  5 10:54:21 me kernel: [  219.778047]  000000ed4be93bd8 0000000000000000 ffffffff912d06c0 ffff8d9e771d70c0
Jun  5 10:54:21 me kernel: [  219.778049] Call Trace:
Jun  5 10:54:21 me kernel: [  219.778051]  [<ffffffff9082e7b3>] dump_stack+0x63/0x90
Jun  5 10:54:21 me kernel: [  219.778054]  [<ffffffff9048314b>] __warn+0xcb/0xf0
Jun  5 10:54:21 me kernel: [  219.778055]  [<ffffffff904831cf>] warn_slowpath_fmt+0x5f/0x80
Jun  5 10:54:21 me kernel: [  219.778057]  [<ffffffff906b78a8>] ? kernfs_find_and_get_ns+0x48/0x60
Jun  5 10:54:21 me kernel: [  219.778058]  [<ffffffff906bb56b>] sysfs_remove_group+0x8b/0x90
Jun  5 10:54:21 me kernel: [  219.778060]  [<ffffffff909a6297>] dpm_sysfs_remove+0x57/0x60
Jun  5 10:54:21 me kernel: [  219.778062]  [<ffffffff90998ab8>] device_del+0x58/0x270
Jun  5 10:54:21 me kernel: [  219.778063]  [<ffffffff90942c42>] ? kbd_disconnect+0x22/0x30
Jun  5 10:54:21 me kernel: [  219.778065]  [<ffffffff90ac6ea3>] evdev_disconnect+0x23/0x60
Jun  5 10:54:21 me kernel: [  219.778066]  [<ffffffff90ac1ef5>] __input_unregister_device+0xb5/0x160
Jun  5 10:54:21 me kernel: [  219.778067]  [<ffffffff90ac2cc7>] input_unregister_device+0x47/0x70
Jun  5 10:54:21 me kernel: [  219.778071]  [<ffffffffc0a14ba2>] uvc_status_cleanup+0x42/0x50 [uvcvideo]
Jun  5 10:54:21 me kernel: [  219.778073]  [<ffffffffc0a0a208>] uvc_delete+0x18/0x160 [uvcvideo]
Jun  5 10:54:21 me kernel: [  219.778074]  [<ffffffffc0a0a423>] uvc_release+0x23/0x30 [uvcvideo]
Jun  5 10:54:21 me kernel: [  219.778078]  [<ffffffffc098f946>] v4l2_device_release+0xe6/0x120 [videodev]
Jun  5 10:54:21 me kernel: [  219.778079]  [<ffffffff909982d2>] device_release+0x32/0x90
Jun  5 10:54:21 me kernel: [  219.778081]  [<ffffffff90830f7a>] kobject_release+0x6a/0x170
Jun  5 10:54:21 me kernel: [  219.778082]  [<ffffffff90830e37>] kobject_put+0x27/0x50
Jun  5 10:54:21 me kernel: [  219.778083]  [<ffffffff909985c7>] put_device+0x17/0x20
Jun  5 10:54:21 me kernel: [  219.778086]  [<ffffffffc098e490>] v4l2_release+0x50/0x80 [videodev]
Jun  5 10:54:21 me kernel: [  219.778087]  [<ffffffff906350f7>] __fput+0xe7/0x230
Jun  5 10:54:21 me kernel: [  219.778088]  [<ffffffff906352ae>] ____fput+0xe/0x10
Jun  5 10:54:21 me kernel: [  219.778090]  [<ffffffff904a230e>] task_work_run+0x7e/0xa0
Jun  5 10:54:21 me kernel: [  219.778091]  [<ffffffff904032d2>] exit_to_usermode_loop+0xc2/0xd0
Jun  5 10:54:21 me kernel: [  219.778093]  [<ffffffff90403b3e>] syscall_return_slowpath+0x4e/0x60
Jun  5 10:54:21 me kernel: [  219.778094]  [<ffffffff90c9a8fe>] entry_SYSCALL_64_fastpath+0xa6/0xa8
Jun  5 10:54:21 me kernel: [  219.778095] ---[ end trace cd02296d8a08b517 ]---
Jun  5 10:54:21 me kernel: [  219.802017] ------------[ cut here ]------------
Jun  5 10:54:21 me kernel: [  219.802022] WARNING: CPU: 0 PID: 2455 at /build/linux-hwe-MohJvK/linux-hwe-4.8.0/fs/sysfs/group.c:237 sysfs_remove_group+0x8b/0x90
Jun  5 10:54:21 me kernel: [  219.802023] sysfs group ffffffff912d06c0 not found for kobject 'input14'

编辑3:

另一个调用跟踪显示 USB 连接可能有故障:

Jun  5 11:08:11 me kernel: [ 1049.717359] usb 1-2: new full-speed USB device number 8 using xhci_hcd
Jun  5 11:08:11 me kernel: [ 1049.841492] usb 1-2: device descriptor read/64, error -71
Jun  5 11:08:12 me kernel: [ 1050.069407] usb 1-2: device descriptor read/64, error -71
Jun  5 11:08:12 me kernel: [ 1050.297575] usb 1-2: new full-speed USB device number 9 using xhci_hcd
Jun  5 11:08:12 me kernel: [ 1050.417566] usb 1-2: device descriptor read/64, error -71
Jun  5 11:08:12 me kernel: [ 1050.645641] usb 1-2: device descriptor read/64, error -71
Jun  5 11:08:12 me kernel: [ 1050.873599] usb 1-2: new full-speed USB device number 10 using xhci_hcd
Jun  5 11:08:12 me kernel: [ 1050.873825] usb 1-2: Device not responding to setup address.
Jun  5 11:08:13 me kernel: [ 1051.081804] usb 1-2: Device not responding to setup address.
Jun  5 11:08:13 me kernel: [ 1051.289562] usb 1-2: device not accepting address 10, error -71
Jun  5 11:08:13 me kernel: [ 1051.409586] usb 1-2: new full-speed USB device number 11 using xhci_hcd
Jun  5 11:08:13 me kernel: [ 1051.409821] usb 1-2: Device not responding to setup address.
Jun  5 11:08:13 me kernel: [ 1051.617820] usb 1-2: Device not responding to setup address.
Jun  5 11:08:13 me kernel: [ 1051.825581] usb 1-2: device not accepting address 11, error -71
Jun  5 11:08:13 me kernel: [ 1051.825661] usb usb1-port2: unable to enumerate USB device

奇怪的是,可以找到 idVendor (0bda)(即 Realtek Semiconductor Corp.),但 idProduct (5765) 却无处可寻……

编辑4:

为了清楚起见,我的工作流程如下。

  1. Ubuntu 16.04 全新启动
  2. 发射cheese
  3. 一分钟后,它崩溃并显示以下 kern.log 输出:https://pastebin.com/XVwSEDBZ
  4. 重启cheese。似乎运行正常……
  5. 一分钟后它再次崩溃,但现在出现以下 kern.log 输出:https://pastebin.com/8qHpBcdR(错误 -71)
  6. 现在cheese无法再成功启动(未检测到设备)。
  7. 重新启动并返回步骤 1...

答案1

也请阅读下面的编辑!

因此似乎很多别的遇到过这个error -71问题的人;不仅是网络摄像头,而且是一般的 USB 设备。问题似乎是“内核 2.6.27 中的省电模块引入了一个 USB 错误”。所以我想,为了节省电量,网络摄像头在一分钟左右后就关闭了。

该网站还提供了看似可行的解决方案:

$ sudo -s
$ echo -1> /sys/module/usbcore/parameters/autosuspend

这被记为“修补程序”,但它似乎永久解决了我的问题(重启后,值变回原始值 2,但不再出现网络摄像头故障:))

为了确保万无一失,我还做了“永久修复”:

  1. 在 /etc/modprobe.d 中创建一个名为 usbcore 的文件
  2. 使用以下内容填充文件options usbcore autosuspend=-1
  3. 保存文件
  4. 运行“mkinitrd”(如果你确定没有通过 initrd 加载 USB 设备模块,那么你可以跳过这一步)。我跳过了这一步,因为找不到这个命令。
  5. 重启

希望这对某人有帮助!

重要编辑!

因此,上述设置自动挂起的方法并不通用,并且取决于您的操作系统。有关如何编辑自动挂起参数的更详细答案请参见此处:https://unix.stackexchange.com/questions/91027/how-to-disable-usb-autosuspend-on-kernel-3-7-10-or-above

为了完整性,我在这里只提一下。

对于 Ubuntu 14.04 和 15.04:

编辑 /etc/default/grub 文件并更改 GRUB_CMDLINE_LINUX_DEFAULT 行以添加 usbcore.autosuspend=-1 选项:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.autosuspend=-1"

请注意,退出启动画面是已有的选项。因此,请保留其他选项。

保存文件后,更新grub:

sudo upgrade-grub
(也可能是sudo update-grub2(我都做了))

然后重新启动。

现在检查自动暂停值:

cat /sys/module/usbcore/parameters/autosuspend 并且它应该显示-1

Ubuntu 15.10 及以上版本

步骤相同,但要更改的参数是 autosuspend_delay_ms(而不是 autosuspend)。

编辑2

虚惊一场……所以上面的方法最终还是没起作用。我仍然收到 USB 设备错误信息。以下是网络摄像头崩溃时error -71的完整堆栈跟踪:/var/log/kern.loghttps://pastebin.com/8qHpBcdR。但有一点需要注意:网络摄像头第一次崩溃时,我得到了这种输出:https://pastebin.com/XVwSEDBZerror -71只有在我尝试cheese再次运行(可以正常启动)后才会发生这种情况。当它再次崩溃时,它根本无法再工作(直到我重新启动)。

如果有人知道我能做什么,请告诉我!

编辑3

所以我将内核从 4.8.0-54-generic 更新到了 4.10.0-22-generic,目前看来还算稳定。如果再次崩溃,我会报告。

答案2

好的,所以问题的真正解决方案是我使用不支持网络摄像头的内核。我从 4.8.0-54-generic 升级到 4.10.0-22-generic,网络摄像头现在非常稳定。只有几次它会自行关闭(例如在 Facebook messenger 上),但只需重新启动应用程序即可解决该问题。无需再重新启动。

相关内容