天天看點

為什麼 Android 開發人員不再需要 Windows USB 驅動程式?

作者:CSDN
為什麼 Android 開發人員不再需要 Windows USB 驅動程式?

【CSDN 編者按】随着時間的推移,如今 Android 開發人員無需再通過 USB 驅動程式連接配接裝置了,這具體是怎麼做到的呢?

原文連結:https://fabiensanglard.net/android_windows_driver/index.html

未經允許,禁止轉載!

作者 | FABIEN SANGLARD 譯者 | 彎月

責編 | 夏萌出品 | CSDN(ID:CSDNnews)在 Android 平台出現的早期,使用 Linux 和 Mac OS X 的 Android 開發人員隻需要一根 USB 線就可以連接配接他們的裝置,而 Windows 使用者則需要尋找并安裝驅動程式,非常繁瑣。而如今,我們不再需要驅動程式了,這究竟怎麼回事?

為什麼 Android 開發人員不再需要 Windows USB 驅動程式?

USB 驅動程式 / OS 的基礎知識當你将裝置插入到 USB 端口時,作業系統需要加載其接口的驅動程式。為此,作業系統需要檢查 USB 描述符的層次結構。

為什麼 Android 開發人員不再需要 Windows USB 驅動程式?

通常情況下,隻需讀取裝置描述符的廠商 ID(VID)和産品 ID(PID),就足以确定應加載哪些驅動程式。三大主流作業系統内置了“預設”的裝置類驅動程式,是以大多數 USB 裝置都能夠自動安裝。舉個例子,當連接配接 ErgoDox EZ 鍵盤時,Windows 會加載 hidusb.sys,而不需要使用者安裝驅動程式。如果 Windows 找不到内置的裝置類驅動程式(或者有更好的比對項),則會加載使用者安裝的驅動程式。例如,蘋果 Magic Trackpad 也會擷取 hidusb.sys,但如果安裝了 Bingxing Wang 的驅動程式,那麼 Windows 就會加載 AmtPtpDeviceUm.dll(支援右鍵單擊和多指手勢)。

為什麼 Android 開發人員不再需要 Windows USB 驅動程式?

找不到驅動程式如果找不到驅動程式,Linux 将加載 usbfs,這樣使用者空間程式也可以通路裝置。Mac OS 也是如此,隻不過使用的是 IOKit;而 Windows 會報錯,即沒有加載驅動程式,就無法通路 Android 裝置。

為什麼 Android 開發人員不再需要 Windows USB 驅動程式?

Android 驅動程式為了說明在安裝驅動程式時發生了什麼,我們來看看 Google USB Driver 的“核心”檔案:android_winusb.inf。

為什麼 Android 開發人員不再需要 Windows USB 驅動程式?

INF 檔案訓示:“當 VID=0x18D1 且 PID=0x4E11(即Google Nexus One)時,加載 winusb 驅動程式”。WinUSB 是什麼?類似于 Linux 的 usbfs 和 Mac OS 的 IOKit,它是一種 USB 驅動程式,允許使用者空間程式枚舉接口,并在端點之間進行讀/寫。這就是 adb(Android 調試橋)用來與 Android 裝置通信的方式。

為什麼 Android 開發人員不再需要 Windows USB 驅動程式?

為什麼 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 檢查此描述符。

為什麼 Android 開發人員不再需要 Windows USB 驅動程式?

該裝置已設定為啟用媒體傳輸協定和開發者模式。此特征描述符會訓示這兩個接口需要哪個驅動程式:第一個接口使用 mtp.sys,第二個接口使用 winusb.sys。加載 winusb.sys 後,使用者空間可執行檔案(如 adb)就可以打開裝置,聲明接口,然後開始開發工作。不再需要驅動程式!

為什麼 Android 開發人員不再需要 Windows USB 驅動程式?

哪些裝置支援微軟的作業系統描述符我看了看我收藏的 Pixel 系列裝置,似乎微軟作業系統描述符支援始于 Pixel 2(2017年)和 Pixel 3a(2019年)之間(抱歉,我沒有 Pixel 3 可以測試)。

為什麼 Android 開發人員不再需要 Windows USB 驅動程式?

擴充屬性作業系統描述符Pixel 8 這類的新裝置具有擴充屬性作業系統特征描述符,包含 GUID、幫助頁面、URL 甚至圖示。

為什麼 Android 開發人員不再需要 Windows USB 驅動程式?
為什麼 Android 開發人員不再需要 Windows USB 驅動程式?
為什麼 Android 開發人員不再需要 Windows USB 驅動程式?

繼續閱讀