标签:es2017 发送 specific efi 代码 协议 简介 接口 方式
本文旨在简单介绍一下 UEFI中USB协议栈的代码框架:
主要包括:
USB主控制器驱动(EFI_USB2_HC_PROTOCOL)
USB总线驱动(EFI_USB_IO_PROTOCOL)
USB Mass Storage驱动(EFI_BLOCK_IO_PROTOCOL)
下图是USB协议栈的代码框架:
上图出自:《UEFI与EDKII源代码分析》
下图是USB Host Controller(EHCI)驱动初始化的流程(代码位于:\MdeModulePkg\Bus\Pci\EhciDxe\):
下图是USB BUS驱动初始化的流程(代码位于:MdeModulePkg\Bus\Usb\UsbBusDxe\):
下图是USB Device(Mass Storage)驱动初始化的流程(代码位于:MdeModulePkg\Bus\Usb\UsbMassStorageDxe\):
下面我们来看一个例子:
比如我们需要重启USB设备:
总结:
1.UEFI中底层驱动程序是通过Protocol来向上层驱动提供接口的(Linux中的方式是内核符号表);
2.只有最底层的驱动会去操作硬件(寄存器),EHCI HC寄存器的定义:《ehci-specification-for-usb.pdf》;
3.EhcLinkQhToAsync()把我们要发送的URB放到ASYNCLISTADDR寄存器指定的地方,然后硬件会自动把这个地方的数据发送出去;
标签:es2017 发送 specific efi 代码 协议 简介 接口 方式
原文地址:http://www.cnblogs.com/nju347/p/7764244.html