在 Android 平台出现的早期,使用 Linux 和 Mac OS X 的 Android 开发人员只需要一根 USB 线就可以连接他们的设备,而 Windows 用户则需要寻找并安装驱动程序,非常繁琐。而如今,我们不再需要驱动程序了,这究竟怎么回事?
01
USB 驱动程序 / OS 的基础知识当你将设备插入到 USB 端口时,操作系统需要加载其接口的驱动程序。为此,操作系统需要检查 USB 描述符的层次结构。通常情况下,只需读取设备描述符的厂商 ID(VID)和产品 ID(PID),就足以确定应加载哪些驱动程序。三大主流操作系统内置了“默认”的设备类驱动程序,因此大多数 USB 设备都能够自动安装。举个例子,当连接 ErgoDox EZ 键盘时,Windows 会加载 hidusb.sys,而不需要用户安装驱动程序。如果 Windows 找不到内置的设备类驱动程序(或者有更好的匹配项),则会加载用户安装的驱动程序。例如,苹果 Magic Trackpad 也会获取 hidusb.sys,但如果安装了 Bingxing Wang 的驱动程序,那么 Windows 就会加载 AmtPtpDeviceUm.dll(支持右键单击和多指手势)。
02
找不到驱动程序如果找不到驱动程序,Linux 将加载 usbfs,这样用户空间程序也可以访问设备。Mac OS 也是如此,只不过使用的是 IOKit;而 Windows 会报错,即没有加载驱动程序,就无法访问 Android 设备。
03
Android 驱动程序为了说明在安装驱动程序时发生了什么,我们来看看 Google USB Driver 的“核心”文件:android_winusb.inf。INF 文件指示:“当 VID=0x18D1 且 PID=0x4E11(即Google Nexus One)时,加载 winusb 驱动程序”。WinUSB 是什么?类似于 Linux 的 usbfs 和 Mac OS 的 IOKit,它是一种 USB 驱动程序,允许用户空间程序枚举接口,并在端点之间进行读/写。这就是 adb(Android 调试桥)用来与 Android 设备通信的方式。
暂无评论内容