首页 » 通讯 » 为什么 Android 开拓人员不再需要 Windows USB 驱动轨范?_驱动法式_装备

为什么 Android 开拓人员不再需要 Windows USB 驱动轨范?_驱动法式_装备

admin 2025-01-09 22:54:33 0

扫一扫用手机浏览

文章目录 [+]

原文链接:https://fabiensanglard.net/android_windows_driver/index.html

未经许可,禁止转载!

为什么 Android 开拓人员不再需要 Windows USB 驱动轨范?_驱动法式_装备 为什么 Android 开拓人员不再需要 Windows USB 驱动轨范?_驱动法式_装备 通讯

作者 | FABIEN SANGLARD 译者 | 弯月
责编 | 夏萌
出品 | CSDN(ID:CSDNnews)
在 Android 平台涌现的早期,利用 Linux 和 Mac OS X 的 Android 开拓职员只须要一根 USB 线就可以连接他们的设备,而 Windows 用户则须要探求并安装驱动程序,非常繁琐。
而如今,我们不再须要驱动程序了,这究竟怎么回事?

为什么 Android 开拓人员不再需要 Windows USB 驱动轨范?_驱动法式_装备 为什么 Android 开拓人员不再需要 Windows USB 驱动轨范?_驱动法式_装备 通讯
(图片来自网络侵删)
USB 驱动程序 / OS 的根本知识
当你将设备插入到 USB 端口时,操作系统须要加载其接口的驱动程序。
为此,操作系统须要检讨 USB 描述符的层次构造。

常日情形下,只需读取设备描述符的厂商 ID(VID)和产品 ID(PID),就足以确定应加载哪些驱动程序。
三大主流操作系统内置了“默认”的设备类驱动程序,因此大多数 USB 设备都能够自动安装。
举个例子,当连接 ErgoDox EZ 键盘时,Windows 会加载 hidusb.sys,而不须要用户安装驱动程序。
如果 Windows 找不到内置的设备类驱动程序(或者有更好的匹配项),则会加载用户安装的驱动程序。
例如,苹果 Magic Trackpad 也会获取 hidusb.sys,但如果安装了 Bingxing Wang 的驱动程序,那么 Windows 就会加载 AmtPtpDeviceUm.dll(支持右键单击和多指手势)。

找不到驱动程序
如果找不到驱动程序,Linux 将加载 usbfs,这样用户空间程序也可以访问设备。
Mac OS 也是如此,只不过利用的是 IOKit;而 Windows 会报错,即没有加载驱动程序,就无法访问 Android 设备。

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 设备通信的办法。

为什么 Android 设备不再须要 Windows 驱动程序
前面描述的方法有一个明显的毛病。
如果 Android 设备的 VID/PID 未列出,winusb 将不会加载。
Windows 8 有一种比 INF 文件更好的方法来确定接口须要哪个驱动程序。
它可以直接讯问设备!
当连接设备时,操作系统发出 String Descriptors 要求,索引为 0xEE。
如果设备与微软操作系统描述符(MOD)兼容,则返回字符串 M\0S\0F\0T\01\000\0\0。
在这种情形下,Windows 会要求扩展兼容 ID OS 特色描述符。
我们可以利用 Pixel 6 上的 libusb 的 xusb 检讨此描述符。

该设备已设置为启用媒体传输协议和开拓者模式。
此特色描述符会指示这两个接口须要哪个驱动程序:第一个接口利用 mtp.sys,第二个接口利用 winusb.sys。
加载 winusb.sys 后,用户空间可实行文件(如 adb)就可以打开设备,声明接口,然后开始开拓事情。
不再须要驱动程序!

哪些设备支持微软的操作系统描述符
我看了看我收藏的 Pixel 系列设备,彷佛微软操作系统描述符支持始于 Pixel 2(2017年)和 Pixel 3a(2019年)之间(抱歉,我没有 Pixel 3 可以测试)。

扩展属性操作系统描述符
Pixel 8 这类的新设备具有扩展属性操作系统特色描述符,包含 GUID、帮助页面、URL 乃至图标。

相关文章