macos - 在 T2 Macbook Pro 上看不到所有带有 PyUSB 和 libusb 的 USB 设备
问题描述
我一直在使用 PyUSB 和 libusb 来处理我的 USB 设备。在底层,PyUSB 用于libusb-1.0.24.dylib
访问所有 USB 设备。这很好用,但我在使用它来查看我的网络摄像头时遇到了问题。事实上,我什至无法为我的网络摄像头获取USB 描述符,这让我感到惊讶。
我有一台配备 T2 芯片的 Macbook Pro 2019。当我在系统信息中查找我的 USB 设备时,我知道所有内部 USB 设备似乎都位于 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 描述符?