我突然意识到我实际上并不了解本机端口驱动程序(即每个操作系统上的本机串行/并行/USB/等驱动程序)与外部硬件特定设备驱动程序之间的区别。
例如,如果我的操作系统上已经有 USB 驱动程序(用于通过 USB 接口/端口与 USB 设备通信),那么为什么我的新网络摄像头(或打印机)带有自己的设备驱动程序?
“端口/接口驱动程序”是否负责设置与外部/外围设备的电气连接,以及设备驱动程序使用那些驱动程序向设备发出特定的 I/O 命令?因此,可能类似于:
我这样说是对的还是错的?换句话说,在上述场景中,是否实际上使用了两个驱动程序(一个用于设备,一个用于 USB 端口)?
- 如果是的话,那么两位车手的分工是怎样的?
- 否则,为什么大多数操作系统都有本机端口驱动程序(串行、USB 等),为什么键盘、鼠标、网络摄像头、打印机等有自己的设备驱动程序?
答案1
您说得没错,但也不完全正确。每个 USB 设备都宣称自己是某些预定义设备类别的成员 - HID、COM、大容量存储、网络摄像头等。因此,这些设备向操作系统表明它们符合某些明确定义的功能。操作系统将为此类加载通用驱动程序,您应该期望该设备具有基本功能。
但是,许多设备制造商都希望自己与众不同,并加入一些扩展功能,如自动对焦、特殊按钮或额外格式等。在这种情况下,制造商将提供自己的驱动程序,该驱动程序是 VID/PID 特定的。如果安装了此驱动程序,操作系统每次都会加载它,因此您将从新设备获得新的闪亮功能。自定义驱动程序的实现方式可能有所不同。它可以是完全自定义的驱动程序,也可以是使用 Microsoft 世界中称为“过滤驱动程序”的方法对默认驱动程序进行一些修改,就像您图片中的那样。产品特定的驱动程序如何在 Android/Linux 中实现,您最好在相应的论坛中询问人们。