我有一個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. Erlang:當你f()中的一個Pid時會發生什麼?
- 3. 當你運行一個程序時會發生什麼?
- 4. Raspbian Jessie:當我插入我的USB設備時,udev不會觸發
- 5. 當你同時觸摸兩個按鈕時會發生什麼
- 6. 當你在瀏覽器中輸入URL時會發生什麼
- 7. 當你在unix shell上鍵入時會發生什麼
- 8. 當設備旋轉時調用onDestroy會發生什麼問題
- 9. 你怎麼做到這一點,當你按下一個鍵會發生什麼
- 10. 如果USB設備不符合USB 2.0,可能會發生什麼問題?
- 11. 如果你傳入一個無效的widgetvar會發生什麼?
- 12. 當usb設備插入時從用戶處獲取輸入
- 13. 當你等待一個失敗的任務時會發生什麼
- 14. 當你調用一個線程的中斷()時會發生什麼?
- 15. 當你聲明一個具有空邊界的數組時會發生什麼
- 16. 當你調用UItableview的重裝兩次時會發生什麼
- 17. SQL Server - 當表中的一行更新時會發生什麼?
- 18. 寫入未插入的USB設備
- 19. 當你增加一個整數超過其最大值時會發生什麼?
- 20. 當你爲linux內核編寫一個路徑時會發生什麼
- 21. Ubuntu Linux - 在插入USB設備時產生應用程序
- 22. 當你用mlockall設置的內存不足時會發生什麼?
- 23. 當你rm文件時會發生什麼?
- 24. 當你從C啓動A到B時會發生什麼?
- 25. 當你邏輯不是浮動時會發生什麼?
- 26. 當你JAR而不是WAR時,會發生什麼情況
- 27. 當你停止VS調試器時會發生什麼?
- 28. 當你增加數組時,會發生什麼。 {A [in.nextInt()] ++;}
- 29. 當你使用unbind()失敗時會發生什麼?
- 30. 當你開始一個新的POJO課程時,你會做什麼?
你給微軟一個副本的方式是什麼(如他們的稱謂)? – Will 2010-06-10 09:37:23
WHQL。不,這不是第一步。 – Christopher 2010-06-10 09:42:07
瞭解:)。 – Will 2010-06-10 09:56:58