EDK II之SMM/SMI】的更多相关文章

SMM:System Managerment Mode SMM有自己的smm core以及dispatcher(可以简单的把smm core跟dxe core看成是平行的存在),smm有自己的运行空间,有自己的smm driver. 在模块的inf文件里面的MODULE_TYPE来指定MODULE的类型: smi: 1. smi有很多种比如sw, sx, power_button等: 2. 通过下面的sw smi的例子可以看出来,sw smi能够实现在OS下调用BIOS的code: 3. 当我们…
密钥对:公钥分发,私钥自留.常见的公钥格式: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里面把…
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 …
EFI_STATUS Status = EFI_SUCCESS; EFI_GUID OemOSTypeGuid = {0xd06a0bc7, 0x9feb, 0x4cbb, 0xbd, 0x78, 0xbb, 0xdc, 0xe7, 0x70, 0xef, 0xd3}; UINT32 Attributes = ; UINTN DataSize = sizeof (OEM_OS_TYPE2); OEM_OS_TYPE2 SaveOSType2; Status = pRS->GetVariable…
UEFI中通过Device Path来描述设备的路径,一个完整的路径由多个Device Path Nodes组成. 下面通过输入设备的路径作为例子: PNP0A03 – PCI Host BridgePNP0303 – PC Keyboard ControllerConIn: The device path of the default input console. 下图是在系统不接任何外设的情况下:系统中只有一个输入设备:PS2 KB 下图在上图的基础上外接了一个USB的键盘:可以看到,除了一…
本文简单介绍一下UEFI中的事件管理: UEFI是不支持多进程的,但是UEFI支持多事件分发机制.UEFI只支持时钟中断,并基于时钟中断实现事件分发.类似于OS中基于时钟中断来实现基于时间片的多任务调度. 下图是DXE内核管理事件的结构: 1. UEFI把事件分成32个优先级,当我们创建一个事件的时候,我们会把他添加到链表gEventSignalQueue中. 2. 当我们触发(sign)一个事件时,我们会把他添加到他对应的优先级的链表&gEventQueue[Event->NotifyTp…
本文旨在简单介绍一下UEFI中驱动程序的加载方式(这里涉及的模块指的是符合UEFI Driver Model的模块): 在UEFI中,当一个驱动模块被加载时,在模块入口点只会安装EFI_DRIVER_BINDING_PROTOCOL等,而不会去执行驱动程序的初始化(这一点与Linux中不同,在Linux中,当我们在驱动模块的入口点调用driver_register()来注册驱动的时候,会在driver_register()的里面调用总线的match(),驱动与设备匹配成功之后紧接着就会调用驱动程…
本文简单介绍一下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…