EDK II之USB协议栈的实现简介】的更多相关文章

本文旨在简单介绍一下 UEFI中USB协议栈的代码框架: 主要包括: USB主控制器驱动(HCDI:EFI_USB2_HC_PROTOCOL) USB总线驱动(USBDI:EFI_USB_IO_PROTOCOL) USB Mass Storage驱动(EFI_BLOCK_IO_PROTOCOL) 下图是USB协议栈的代码框架: 上图出自:<UEFI与EDKII源代码分析> 下图是USB Host Controller(EHCI)驱动初始化的流程(代码位于:\MdeModulePkg\Bus\P…
文本旨在简单介绍一下Linux中USB协议栈的代码框架: 下图是USB协议栈相关数据结构的关系图: 下面结合上图看一下系统初始化的流程: 1.USB子系统初始化:\drivers\usb\core\usb.c subsys_initcall(usb_init); static int __init usb_init(void)中调用了很多初始化函数,目前关注下面两个: retval = bus_register(&usb_bus_type);// 注册usb 总线 retval = usb_hu…
本文简单介绍一下USB设备的驱动程序是如何匹配设备以及被加载的: 上文(UDK中USB总线驱动的实现框架)提到USB总线枚举设备的最后一步是调用gBS->ConnectController()去查找device的驱动并加载. 1.查找驱动: 首先UEFI中所有符合UEFI Driver Model的驱动在模块的入口点,都会去安装EFI_DRIVER_BINDING_PROTOCOL:gBS->ConnectController()会去遍历系统中所有的EFI_DRIVER_BINDING_PRO…
本文简单介绍一下UEFI中USB驱动的实现框架: 下图是USBD向上层驱动提供的接口: 1.从图中我们可以看出,USBDI的实现主要通过调用HCDI实现 和 访问USB_INTERFACE结构体(该结构体在总线枚举过程中存放了device的相关信息): (这里为什么是从interface获取呢?一个device可以包含多个configuration,一个configuration可以包含多个interface,我们可以把device看成一个物理设备,而把interface看成逻辑设备,就是说in…
本文简要介绍一下UEFI中EHCI驱动的代码实现框架: 下图是HCDI: 上图是Host驱动程序向上层驱动提供的接口图: 1.大部分接口的最后动作都是去操作主控制器寄存器,ECHI的spec:<ehci-specification-for-usb.pdf>: 2.寄存器PORTSC用来获取/设置端口的状态(这里表示root hub的端口),root hub有几个port,这里就会有几个对应的寄存器(根据硬件厂商自己的实现): 3.图中出现的2个链表是由硬件自己维护的,链表位于内存的地址由相关寄…
密钥对:公钥分发,私钥自留.常见的公钥格式:cer/der,常见的私钥格式:pfx. BIOS中Secure Boot的原理:把公钥包在code里面,当使用gBS->LoadImage()去加载模块(UEFI Image)的时候会用BIOS里面的公钥去验证Image有没有正确签名,验证通过则Image成功被加载(签名实例:signtoolx64.exe sign -f 私钥.pfx -fd sha256 shell.efi).         Secure Boot举例: 当我们在BIOS里面把…
USB协议规范文档简介       USB驱动开发必须对USB相关的协议规范有一定程度的了解,理解得越深,遇到的问题就会越少,解决问题的速度也就越快. 工欲善其行,必先利其器.USB协议规范就是USB驱动开发人员的工具.     在USB官方网站( http://www.usb.org/ )包含了我们必需的所有的USB协议规范.     USB协议规范文档下载:http://www.usb.org/developers/docs          - USB2.0          Univer…
Setting up a EDK II build environment on Windows and Linux:搭建Windows和Linux开发环境[2.2] 2015-07   北京海淀区  张俊浩 2. Setting Up EDKII Development Environment(EDKII开发环境的搭建) ->2.1The General Procedure Of Setting Up EDKII Development Environment(搭建EDKII项目的通用流程)…
Tools:Installing and using the Required Tools for downloading and Building EDK II工具篇:安装/使用EDKII源代码获取/编译工具[2.3] 2015-07   北京海淀区  张俊浩 2. Setting Up EDKII Development Environment(EDKII开发环境的搭建) ->2.1 The General Procedure Of Setting Up EDKII Development …
本文旨在简单介绍一下UEFI中驱动程序的加载方式(这里涉及的模块指的是符合UEFI Driver Model的模块): 在UEFI中,当一个驱动模块被加载时,在模块入口点只会安装EFI_DRIVER_BINDING_PROTOCOL等,而不会去执行驱动程序的初始化(这一点与Linux中不同,在Linux中,当我们在驱动模块的入口点调用driver_register()来注册驱动的时候,会在driver_register()的里面调用总线的match(),驱动与设备匹配成功之后紧接着就会调用驱动程…