Wil*_*ill 3 windows macos usb device-driver
I have an embedded device with a USB connection. When the user plugs the device into their PC (Windows, OSX), how does the operating system discover what drivers to install? How do I get my drivers to be selected? Can they reside on some central server (run by the OS vendor)?
对于OS X:
好吧,我想第一部分与Windows类似.但是,驱动程序(或更确切地说是驱动程序堆栈)是通过称为驱动程序匹配的过程选择的.每个驱动程序都捆绑了一个特殊的XML字典文件,该文件描述了驱动程序所用的设备.
字典中的一个键是IOProviderClass键,它告诉操作系统大致说明驱动程序所用的设备系列.已加载的驱动程序可以提供"nubs",这是其他驱动程序可以附加到的接口.哪些驱动程序尝试附加到nubs由IOProviderClass键确定.
因此,例如,当您将USB驱动器插入Mac时,已加载的USB控制器驱动程序会检测到此情况,并为设备提供一个结点.通过驱动程序匹配选择低级USB驱动程序 - 检查字典中的键/值与从设备获得的值,例如供应商ID,设备类型等,并为正确的IO提供者类的每个驱动程序导出分数.分数最高的那个附在小块上.
这个新驱动程序本身可能会提供其他驱动程序附加的小块.例如,连接USB磁盘驱动器将导致USB堆栈为要连接的SCSI块设备驱动程序创建一个nub.通常,这将导致Apple的标准SCSI块设备驱动程序被加载,这将为BSD驱动程序(每个分区一个)提供小块,这反过来又在开发文件系统中创建BSD设备节点.
如果您希望在其他人之上选择您的驱动程序,您需要做的就是为您的驱动程序添加关键值对,从而使您的驱动程序获得非常高的分数.通常只需将密钥放入供应商ID /型号即可.但是,我认为你可以覆盖匹配方法(设备驱动程序是用一组有限的C++编写的)来给你的驱动程序一个非常高的分数.
这是一个高级别的观点.但是,自从我做了这些以来已经有好几年了,所以请确保你阅读了当前的Apple文档.
这适用于Windows:
当USB设备插入系统时,会通知USB总线驱动程序.总线驱动程序向设备发送标准USB请求(USB_DEVICE_DESCRIPTOR).有了这个,设备将报告其名称和类型.(形式bDeviceClass/bDeviceSubClass/bDeviceProtocol).
使用此信息,Windows会在系统中创建设备条目.这是硬件ID.系统现在尝试查找可以处理设备的通用驱动程序(HID/UVC)或者专门注册自身以支持此硬件ID的驱动程序.
要将驱动程序注册为特定设备的处理程序,您必须将驱动程序安装到系统中,或者必须为Microsoft提供一个可以在其服务器上提供的驱动程序.
| 归档时间: |
|
| 查看次数: |
7583 次 |
| 最近记录: |