从PCI配置空间(EFI)读取USB设备供应商ID和设备ID

时间:2016-01-17 17:09:34

标签: config space pci uefi

我想通过EFI程序获取插入的USB设备的供应商ID和设备ID。我可以读取整个PCI配置空间我找到USB主机控制器,我的USB设备是puckged我也可以读取为该控制器寻址的整个内存,但我不知道究竟我在这个内存中搜索什么来获取这些ID。有人能帮助我吗?

2 个答案:

答案 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中都有这两个示例。