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

时间:2013-11-30 11:03:46

标签: linux usb

每个USB设备都必须根据设备驱动程序进行某些USB设备类定义才能在Linux系统上使用..那部分我理解。

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

任何人都能解释一下吗?

3 个答案:

答案 0 :(得分:1)

Linux的源代码可用,因此您可以查看它的工作原理。以下是您提到的cdc-acm USB驱动程序的源代码: http://lxr.linux.no/linux+v3.12.2/drivers/usb/class/cdc-acm.c

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

答案 1 :(得分:0)

USB设备指示将加载哪种类型的驱动程序。如果它出现了CDC类描述符,那么它将加载一个CDC类驱动程序(对于其他类型的设备,如USBAudio,HID键盘/鼠标等也是如此)。

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

看起来3G加密狗有recent commit,也许这就是你想要的?

答案 2 :(得分:-1)

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