我最近读到了有关Windows驱动程序模型的文档,其中一章写道:
但是怎么做呢?
例如,操作系统希望与USB设备进行通信。
它(操作系统)如何获得设备的硬件id?
是否有某种协议可以与硬件进行通信,比如:
操作系统发送一个信号(或USB格式的消息),其正文为“我想知道hardware-id"
。
如果有这样的协议,你能告诉我这种协议的“标准”吗?
发布于 2021-02-12 16:39:14
在大多数现代计算机上,每个USB集线器都连接到一个xHCI控制器(https://wiki.osdev.org/EXtensible_Host_Controller_Interface)上。在启动时,BIOS将在RAM中构建ACPI表,操作系统将在常规位置上查找这些表。一旦操作系统找到这些表,它将查看每个条目,以确定哪些设备被插入到计算机上,包括xHCI控制器。如osdev.org所述
所有xHCI控制器的类ID为0x0C,Sublcass ID为0x03,接口值为0x30。此设备的配置空间将包含两个基本地址寄存器: BAR0和BAR1。这两个32位地址字段组合在一起创建一个64位地址,该地址指向控制器的内存映射寄存器的基本地址。
然后,使用xHCI s的存储器映射寄存器向USB设备发送命令,包括获取USB设备的设备描述符的命令。https://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/extensible-host-controler-interface-usb-xhci.pdf上的文档是xHCI的规范。因此,如果你想真正理解它是如何在引擎盖下工作的,那么这是一个很好的地方。
https://stackoverflow.com/questions/66167522
复制相似问题