首页 > 解决方案 > 在 T2 Macbook Pro 上看不到所有带有 PyUSB 和 libusb 的 USB 设备

问题描述

我一直在使用 PyUSB 和 libusb 来处理我的 USB 设备。在底层,PyUSB 用于libusb-1.0.24.dylib访问所有 USB 设备。这很好用,但我在使用它来查看我的网络摄像头时遇到了问题。事实上,我什至无法为我的网络摄像头获取USB 描述符,这让我感到惊讶。

我有一台配备 T2 芯片的 Macbook Pro 2019。当我在系统信息中查找我的 USB 设备时,我知道所有内部 USB 设备似乎都位于 T2 芯片后面:

系统信息-t2

并深入研究ioreg命令,我可以清楚地看到这些设备是 USB 并且是可见的:

% ioreg -c IOUSBDevice -r 

[...]
+-o FaceTime HD Camera (Built-in)@80200000  <class AppleUSBDevice, id 0x1000005$
  | {
  |   "kUSBSerialNumberString" = "CC2948501XLHNW1BM"
  |   "bDeviceClass" = 239
  |   "bDeviceSubClass" = 2
  |   "iSerialNumber" = 3

当我尝试使用 PyUSB 获取我的 USB 设备列表时,它似乎无法识别 T2 芯片上的任何内容:

import usb.core
import usb.util

for bus in usb.busses():
    for device in bus.devices:
        if device != None:
            usbDevice = usb.core.find(idVendor=device.idVendor, 
                                      idProduct=device.idProduct)
            print(usbDevice)

因此我得到了一些设备:我看到 T2 芯片后面的一些 HID 设备,但不是我的网络摄像头。同样,我使用了py-libusb的示例代码,除了 HID 设备之外,它也不会从 T2 芯片返回任何内容。

我不认为 T2 芯片阻塞了摄像头:首先 OpenCV2 可以毫无问题地找到我的网络摄像头,如果我使用 Parallels Desktop 并将摄像头分配给 Windows,我可以在 Windows 上运行 PyUSB 代码并查看我的 Webcam USB 描述符。所以看起来这是mac和T2芯片上的libusb。

我尝试请求我的相机的确切 idVendor 和 idProduct,但仍然没有返回。我尝试挖掘,print(usb.busses())但除了某个位置之外,我无处可去。

我了解网络摄像头是由系统提供的 UVC 驱动程序拍摄的,我不需要自己编程,但这不是重点。谁能告诉我发生了什么:为什么我看不到 USB 描述符?

标签: macoslibusbpyusb

解决方案


推荐阅读