Linux 什么';当设备是调制解调器时,USB类中有什么不同?

Linux 什么';当设备是调制解调器时,USB类中有什么不同?,linux,usb,Linux,Usb,每个USB设备都必须根据设备驱动程序在Linux系统上的使用情况进行USB设备类定义。。那部分我明白了 但我不明白什么。例如,大多数USB调制解调器都属于通信设备类。。我有一个3G USB调制解调器和一个3G USB加密狗(例如,塔塔光子),两者属于同一通信类别,但3G USB调制解调器使用CDC-ACM驱动程序,3G加密狗使用串行转换器驱动程序(USB串行)。是什么使这些设备不同 有人能解释一下吗?所有Linux驱动程序的源代码都是可用的。。。您可以通过查看源代码自行查看。USB设备决定将加载

每个USB设备都必须根据设备驱动程序在Linux系统上的使用情况进行USB设备类定义。。那部分我明白了

但我不明白什么。例如,大多数USB调制解调器都属于通信设备类。。我有一个3G USB调制解调器和一个3G USB加密狗(例如,塔塔光子),两者属于同一通信类别,但3G USB调制解调器使用CDC-ACM驱动程序,3G加密狗使用串行转换器驱动程序(USB串行)。是什么使这些设备不同


有人能解释一下吗?

所有Linux驱动程序的源代码都是可用的。。。您可以通过查看源代码自行查看。

USB设备决定将加载何种类型的驱动程序。如果它本身带有CDC类描述符,那么它将加载一个CDC类驱动程序(其他类型的设备如USBAudio、HID键盘/鼠标等也是如此)

如果USB设备本身带有特定于供应商的描述符,则需要在VID和PID上进行匹配,以确定要加载哪个特定于供应商的驱动程序。在USB到串行网桥的情况下,有许多供应商,因此加载的驱动程序取决于您的特定电缆。您可以在root/drivers/usb/serial/中找到基于usbserial的驱动程序的源代码,从那里您可以查询设备的VID/PID,以确定为该接口加载的驱动程序


看起来有一个3G加密狗的版本,也许这就是你想要的?

Linux的源代码是可用的,所以你可以看看它是如何工作的。以下是您提到的cdc acm USB驱动程序的源代码:


查看第1516行附近的
acm\u id[]
数组。这是一个庞大的结构数组,用于描述cdc acm驱动程序将与哪些USB设备匹配。看起来这个阵列从古怪的设备开始,最后有了更多标准的通用设备。看看你是否能找到与你拥有的每台设备相匹配的线路!这个数组被传递给内核中的一些更通用的USB代码,这些代码负责将USB设备与驱动程序进行匹配。

这是一个怎样的答案?也许你可以让他在源代码中找到相关的位置,并描述视频和PID是如何工作的?你能为你提到的每个设备提供详细的lsusb输出吗?另外,您运行了哪些命令来确定设备使用不同的驱动程序,这些命令的输出是什么?