码迷,mamicode.com
首页 > 其他好文 > 详细

UEFI中USB协议栈的实现简介

时间:2017-10-31 23:56:18      阅读:375      评论:0      收藏:0      [点我收藏+]

标签: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寄存器指定的地方,然后硬件会自动把这个地方的数据发送出去;

 

UEFI中USB协议栈的实现简介

标签:es2017   发送   specific   efi   代码   协议   简介   接口   方式   

原文地址:http://www.cnblogs.com/nju347/p/7764244.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!