我有一個USB連接的嵌入式設備。當用戶將設備插入其PC(Windows,OSX)時,操作系統如何發現要安裝的驅動程序?我如何獲得我的驅動程序被選中?他們是否可以駐留在某個中央服務器上(由OS供應商運行)?當你插入一個新的USB設備時會發生什麼?
回答
這是針對Windows:
當USB設備插入到系統中,USB總線驅動程序通知。 總線驅動程序向設備發送標準USB請求(USB_DEVICE_DESCRIPTOR)。通過此設備報告其名稱和類型。 (形式bDeviceClass/bDeviceSubClass/bDeviceProtocol)。
使用此信息,Windows會在系統中創建一個設備條目。這是硬件ID。系統現在試圖找到可以處理設備的通用驅動程序(HID/UVC)或專門註冊以支持此硬件ID的驅動程序。
要將驅動程序註冊爲特定設備的處理程序,必須將該驅動程序安裝到系統中,或者必須向Microsoft提供一個可在其服務器上提供的驅動程序。
對於OS X:
那麼我想象的第一部分是類似於Windows。但是,驅動程序(或者說驅動程序堆棧)是通過名爲driver matching的進程選擇的。每個驅動程序都捆綁了一個特殊的XML字典文件,該文件描述了該驅動程序所用的設備。
字典中的一個鍵是IOProviderClass鍵,它告訴操作系統粗略地說明了驅動程序適用於哪些設備。已加載的驅動程序可以提供「nubs」,這是其他驅動程序可以連接的接口。哪些驅動程序嘗試附加到結點由IOProviderClass鍵確定。
因此,例如,當您將USB驅動器插入Mac時,已加載的USB控制器驅動程序會檢測到此情況併爲設備提供一個結點。通過驅動程序匹配來選擇低級USB驅動程序 - 根據從設備獲得的值來檢查字典中的鍵/值,例如,供應商ID,設備類型等,併爲得到正確的IO提供者類別的每個驅動器導出分數。最高得分的那個被附在結節上。
這個新驅動程序本身可能會爲其他驅動程序提供nubs附加。例如,連接USB磁盤驅動器將導致USB堆棧爲SCSI塊設備驅動程序創建一個結點以連接到該結點。通常情況下,這會導致蘋果的標準SCSI塊設備驅動程序被加載,這反過來會爲BSD驅動程序(每個分區一個)提供nubs,從而在dev文件系統中創建BSD設備節點。
如果您希望將您的驅動程序選定爲高於其他驅動程序,您只需爲驅動程序所用的設備添加鍵值對,從而使驅動程序獲得非常高的分數。通常只需將密鑰放入您的供應商ID /型號就足夠了。不過,我認爲你可以重寫匹配方法(設備驅動程序是用一組受限制的C++編寫的)來給你的驅動程序一個非常高的分數。
這是一個高層次的觀點。不過,這是我做了這麼多年的,因此請確保您閱讀了當前的Apple文檔。
- 1. 當你不加入你的主題時會發生什麼?
- 2. 當你產生一個循環時會發生什麼?
- 3. Erlang:當你f()中的一個Pid時會發生什麼?
- 4. 當你運行一個程序時會發生什麼?
- 5. 當你調用新的Object()時會發生什麼?
- 6. Raspbian Jessie:當我插入我的USB設備時,udev不會觸發
- 7. 當你同時觸摸兩個按鈕時會發生什麼
- 8. 當插入USB設備時,Android應用程序重新啓動
- 9. 當你輸入12ab到scanf(「%d」,&argu)時,會發生什麼?
- 10. 當你在瀏覽器中輸入URL時會發生什麼
- 11. 當你在unix shell上鍵入時會發生什麼
- 12. 當設備旋轉時調用onDestroy會發生什麼問題
- 13. 你怎麼做到這一點,當你按下一個鍵會發生什麼
- 14. 如果USB設備不符合USB 2.0,可能會發生什麼問題?
- 15. 如果你傳入一個無效的widgetvar會發生什麼?
- 16. 當你泄漏「設備」和「設備上下文」 - 特別是d3d時會發生什麼?
- 17. 當usb設備插入時從用戶處獲取輸入
- 18. 當你改變一個用getter檢索的對象時會發生什麼?
- 19. 當你調用一個線程的中斷()時會發生什麼?
- 20. 當你等待一個失敗的任務時會發生什麼
- 21. 當你聲明一個具有空邊界的數組時會發生什麼
- 22. 當你背景一個inapp購買的「成功」屏幕時會發生什麼?
- 23. 當你引用一個未定義的數組元素時,會發生什麼?
- 24. 當你創建一個這樣的對象時會發生什麼?
- 25. 當你調用UItableview的重裝兩次時會發生什麼
- 26. 當你聲明一個對象時堆上發生了什麼?
- 27. SQL Server - 當表中的一行更新時會發生什麼?
- 28. 當你撥打`如果鍵入字典'會發生什麼?
- 29. 當你增加一個整數超過其最大值時會發生什麼?
- 30. 當你爲linux內核編寫一個路徑時會發生什麼
你給微軟一個副本的方式是什麼(如他們的稱謂)? – Will 2010-06-10 09:37:23
WHQL。不,這不是第一步。 – Christopher 2010-06-10 09:42:07
瞭解:)。 – Will 2010-06-10 09:56:58