BIOS下 usb 智能管控,主要是控制每一个接口的开启关闭,以及存储设备的只读功能。
如果ec没有针对每一个usb端口进行供电控制,需要使用软件方案完成该功能。
目前每一个usb端口在uefi中都有一个devicePath,在uefi shell中可以看到当前插入的usb设备,主要是u盘,或者鼠标键盘
例如:
L"PciRoot(0x0)/Pci(0x7,0x1)/Pci(0x0,0x3)/USB(0x6,0x0)/USB(0x3,"
前面是pci 设备路径,分别是DEV FUNC号。USB路径 ,分别是port以及interface.
我们这边可以先使用shell或者打印,将每一个端口路径打印出来,和硬件进行对比确认正确。
有了所有的端口路径,我们就可以针对所有端口进行软件控制。
在usb扫描过程中,会创建USB_INTERFACE,这个代表设备所用到的接口,一般u盘、键盘会是一个接口,鼠标可能会有2个interface.
在Bus\Usb\UsbBusDxe\UsbEnumer.c UsbCreateInterface 函数中会创建usb interface.并且为每一个interface安装gEfiUsbIoProtocolGuid,该gEfiUsbIoProtocolGuid会在后续鼠标键盘u盘驱动中使用,驱动通过该gEfiUsbIoProtocolGuid调用设备以及设备方法。
可在UsbCreateInterface 中进行端口的管控
针对USB的存储只读,可在u盘驱动中,在读写函数中对DevicePath进行判断,然后进行控制。