為什麼Windows在U盤插入時需要安裝驅動而Android手機使用OTG功能時不需要安裝驅動?

時間 2021-06-03 00:55:51

1樓:

不是搞驅動開發的,只是業餘愛好者,強答一波……

首先,各種U盤其實都可以用乙個通用驅動搞定。(可能還有一些奇奇怪怪的坑被這個驅動默默填上了?我不清楚)

U盤會通過USB協議報告給手機/電腦系統自己的VID(製造商ID)、PID(產品ID)這些值,然後系統就知道有U盤插進來了,會做對應的識別和配置等工作,Linux和Windows都會做這些事情,只是具體細節過程有點不一樣而已。

USB Mass Storage,這名字看著挺眼熟吧。

Windows下就是usbstor.sys,這東西可以叫核心模式驅動程式,也可以叫做——核心模組!

驅動的啟動項是記錄在登錄檔services子鍵下的。一般還有和核心模組配套的inf檔案,描述這個驅動匹配的是什麼硬體,這些資訊會在安裝驅動時寫入登錄檔——啊,一不小心露餡了,這塊應該是drvinst.exe在做,再具體點我就不清楚了。

插進U盤後,核心會通知有關的服務(又露餡了,我不知道是哪個服務),然後檢查usbstor驅動有沒有安裝,沒有的話就按照inf檔案的描述去安裝一下(呼叫drvinst.exe);如果已經安裝,就檢查驅動有沒有載入,沒有的話就把它載入進核心(按照登錄檔services裡記錄的檔案路徑和配置)……

Android是基於Linux的,它也有USB子系統,也有usbstor這個驅動。有點不同的是,Linux識別、配置這個U盤的過程不一樣——Linux沒有登錄檔、沒有inf檔案、沒有drvinst.exe——但是Linux有sysfs,有udev(Android下好像是ueventd)。

當然,核心裡的各種函式和過程也有天壤之別。

開發者可以選擇把usbstor驅動直接編譯進核心,也可以選擇編譯出乙個可以隨時載入/解除安裝的usbstor.ko核心模組。

對於加密之類特殊功能,也許要裝乙個驅動,看情況——比如,VeraCrypt是要裝驅動的,但Bitlocker to Go給XP準備的閱讀器就不需要。

就表面來講,其實Windows只是把配置驅動的過程在圖形介面顯示出來了而已,Android上用adb或終端模擬器看一下dmesg,也可以看到Linux核心識別U盤的過程,並不是Linux就不需要裝驅動。

Windows每次插不同型號的U盤,甚至只是原來的U盤換乙個口,看上去也要重新走「安裝」這一步,至於為啥這一步看上去那麼慢,我就解釋不清了……

2樓:pangbin106

你好,同型號的U盤,如果SN不同,認為是不同的裝置,因為產品pid和vid都是一樣的,能不能不用寫入登錄檔?把SN遮蔽掉?

3樓:時國懷

你確認是這樣的?我手機可是提示要裝驅動的。

Windows會記錄已經裝過驅動的裝置ID,所以,大部分USB裝置都是在首次插入的時候才提示裝驅動,如果你經常換不同的U盤,那麼基本上每次都提示你正在安裝驅動,而手機不會提示的原因是手機在第一次連線Windows的時候已經裝過了。

另外任何系統中都會有裝驅動的過程,只不過Windows把這個過程顯示給你看了而已。

感謝 @pansz 提醒,如果題主問的是U盤接到手機上為什麼不給安裝驅動提示的問題,那麼這裡我解釋一下:

首先,任何作業系統裝驅動都是需要時間的,只不過Windows告訴你:我正在裝驅動,其它作業系統則隱藏了這個過程。

Windows在有新硬體接入時會記錄硬體的資訊,比如SN/BusID/VendorID等等,這些資訊會儲存在登錄檔裡。當下次硬體在同乙個物理介面上接入的時候,Windows會先掃瞄登錄檔,如果發現這個裝置的驅動過去是裝過的,那麼Windows會直接到登錄檔裡把硬體配置資訊匯入進來,省去了裝置配置的過程,節約安裝硬體的時間。當然實際上能不能節約,以及能節約多少時間,這個問題不好說。

只能說Windows是這樣設計的,也許有它的好處。

究竟哪些裝置資訊會被Windows儲存並用於下次新裝置列舉的檢測,換句話說,哪些裝置會被認為是「新硬體」,這些我沒找到官方的文件,我所知道的:

同型號的U盤,如果SN不同,認為是不同的;

相同的U盤接入不同的USB介面,認為是不同的;

PCI裝置(網絡卡),更換PCI插槽,認為是不同的;

SATA裝置,更換SATA介面,認為是不同的;

@pansz 提到的顯示卡,我覺得顯示卡可能是乙個特例,因為顯示卡的列舉過程可能更早,以至於使用者根本看不到顯示卡驅動的安裝過程,微軟的驅動載入過程有先後之分,像顯示卡這種裝置可能是在較早的階段處理的。

看到有人說Linux內建驅動多,其實這個很難比較,我仍然傾向於認為Windows的驅動更多,Linux只不過隱藏了列舉裝置驅動的過程,Linux載入驅動的速度更快我認為可能與核心結構有關,Linux是非微核心結構的。

U盤插入後提示需格式化,如何拯救U盤資料?

陳ting 我有乙個神奇的經驗,我的優盤壞了,提示格式化,完全不能讀寫,資料不重要,我就扔角落了 重點來了,有一點我把它插在小公尺路由器上 那個帶硬碟的小公尺路由器 不僅沒提示格式化,還能讀寫 以此類推,應該是windows系統能檢測分割槽狀況,而想路由器這種dos或者安卓的讀寫根本不依賴windo...

為什麼BIOS無法識別U盤(u盤裝Linux系統)?

Dejavu 鴿了半年的問題今天終於解決了。開始用的右側USB口,不行,然後換到左側成功進入 又圖有真相 已經嘗試 ubuntu manjaro deepin UOS 均正常。 geostima 我也是911air,自從上個月更新了bios驅動以後也識別不了,但是我在更新前燒錄的能識別,更新後的都不...

U盤為什麼不消失?

威尼的自留地 U盤消失不了,有可能消失的是行動硬碟,題主說的儲存卡銷量反倒是減少了。儲存卡銷量減少主要是使用場景少了,目前主要用於相機 監控 行車記錄儀 無人機,而這些裝置的使用量遠不如手機多,而手機基本上不支援TF卡了。相機的數量也在減少,無人機太貴 家庭使用頻率也少,目前TF卡主要用在行車記錄儀...