我有一个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