我想要实现的是,我插入一个设备,例如鼠标,但通常任何通过USB输出串行数据的设备,然后在终端中screen
,或将其存储在文件中,如果可能的话,使用python来处理它。
作为一个具体的例子,假设我想从插入macbook USB端口的触控板访问数据。当我在终端运行/dev/{tty,cu}.*
时,我得到一堆设备,但没有一个是我想要的。当我运行ioreg -p IOUSB -l -b | grep -E "@|PortNum|USB Serial Number"
时,我看到设备已插入,位于特定地址(即@14200000
),以及<class AppleUSBDevice, id 0x100002c38, registered, matched, active, busy 0 (10 ms), retain 14>
和"PortNum" = 2
。
是的,设备已插入,不,它没有显示在/dev/{tty,cu}.*
中。我不想写一个设备驱动程序,我听说这不是最容易做到的事情。是否有任何解决方案,从设备访问低级数据,不显示在/dev/
目录?
显示为/dev/tty...
和/dev/cu...
的设备实现了源自RS-232的异步串行数据通信协议。过去电脑上有专用的串行端口。在今天的Mac电脑上,它们通常通过USB连接。
很少有USB设备实现串行协议。相反,它们实现了HID协议(键盘,鼠标等),USB大容量存储协议(所有类型的外部驱动器),USB ECM(用于网络适配器)或自定义协议。除了使用自定义协议的设备,macOS为所有这些设备提供了设备驱动程序。
USB不是简单的串行通信。相反,设备配置几个端点。每个端点使用一个单独的通信通道。即使是用于RS-232通信的USB CDC ACM也使用三个端点。此外,USB设备可以同时伪装成多个设备。这就是所谓的复合装置。
我的理解是你想要观察和记录USB通信。主要的方法有:
-
Wireshark使用。它以观察和记录网络流量而闻名,但它也可以为USB做同样的事情。不幸的是,随着macOS上越来越严格的安全性,它不那么容易设置,并且可能无法在Apple Silicon mac上工作了。
-
使用专用的USB协议分析器。它们非常强大,起价约为300美元。