我想通过EFI程序获取插入的USB设备的供应商ID和设备ID。我可以读取整个PCI配置空间我找到USB主机控制器,我的USB设备是puckged我也可以读取为该控制器寻址的整个内存,但我不知道究竟我在这个内存中搜索什么来获取这些ID。有人能帮助我吗?
答案 0 :(得分:3)
PCI配置空间显示PCI和PCI Express设备,而不是USB设备。
PCI配置空间将显示USB控制器的供应商和设备ID,但不会显示连接的设备。您必须通过读/写USB寄存器来枚举USB总线。
请注意,接管USB控制器会破坏当前正在运行的USB堆栈,并终止USB键盘和启动设备。
如果你在UEFI shell,也许你可以在devtree的输出中找到你需要的东西。
如果您正在编写自己的UEFI DXE代码,则必须查询USB驱动程序。
答案 1 :(得分:1)
尽管该问题已被回答并被标记为接受,但我只想挥舞旗帜以供使用:
EFI_PCI_IO_PROTOCOL
用于PCI操作EFI_USB_IO_PROTOCOL
用于与USB设备进行交互,而与主机控制器碰巧连接到哪个总线无关。这样,您的应用程序最终可以在所有兼容的UEFI平台之间移植。
在此发布答案的用户@fpmurphy有时在其github area中都有这两个示例。