Step to UEFI (251)Register PPI Notify

St这个系列是根据 QEMU 执行输出的 Log 来研究代码的。这里继续跟踪研究代码,这次研究的对象是下面这条串口输出:

这句话来自 \MdeModulePkg\Core\Pei\Security\Security.c 文件中的InitializeSecurityServices() 函数:

其中 mNotifyList 注册了一个 Ppi Notify 的 Callback 函数:SecurityPpiNotifyCallback()

PeiServicesNotifyPpi() 的定义在 \MdePkg\Library\PeiServicesLib\PeiSe[......]

阅读全文

Step to UEFI (250)PcdPeim 的分析

前文提到PEI阶段加载了7个模块,从Log 中的如下字样,我们知道当前跳入了 PcdPeim.efi 运行

执行输出的 Log 如下:

其中的 GUID 可以在 \MdePkg\MdePkg.dec 中查到:

最后的一个 PPI Notify 定义为:

继代码位于 MdeModulePkg\Universal\PCD\Pei\Pcd.c 中。

从代码上看,QEMU 模拟了 SPI ROM,使可以看到,这个 PEI Module 主要作用是注册了多个和PCD 相关的 Ppi Service 以便后续使用。

[......]

阅读全文

使用 CH567 USB 键盘增加支持 HID_SETREPORT

从插入USB 键盘开始抓取数据,按笔记本键盘上的按键,测试 Num 从灭到亮,再到灭;测试 Caps 从灭到亮,再到灭。其中的 SET_REPORT 有三个:

  1. 是刚插入的时候系统用来通知键盘,告知当前三个 LED 状态的;
  2. 是NUM LED 从灭到亮,再到灭的动作;
  3. 是CAPS LED 从灭到亮,再到灭的动作;

首先刷上之前的键盘固件,使用逻辑分析仪分析,可以看到,我们之前的设备没有处理SET_REPORT所以会用 STALL 回复:

因此,我们需要响应这个命令。下面是正常情况下,对于一个 SET_REPORT 的通讯:

此外,测试了按USB 键盘 CAPS L[......]

阅读全文

Step to UEFI (249)继续在PeiMain 中(8)

第一次进入PeiCore() 的时候,因为环境尚未准备好,所以很快就能执行到下面的代码:

在这里会执行 PEIM的执行:

进去这个函数之后,因为刚开始内存并没有准备好,所以 (Private->PeiMemoryInstalled) 这个条件不会满足,会进入下面的do … while 循环。

跳转到DiscoverPeimsAndOrderWithApriori() 函数中

这个函数的作用是找到所有的 PEIM以及Apriori 文件。

函数中有一个 DEBUG 输出如下:

对应的串口 Log 中有如下字样,就是说在找到了7个 PEIM[......]

阅读全文

CSME 简述

CSME 算是 Intel X86 PC 上最神秘的部分了,本文根据 us-19-Hasarfaty-Behind-The-Scenes-Of-Intel-Security-And-Manageability-Engine 一文写成。讲述内容无法证伪,各位随便听听即可,了解这些能够帮助BIOS 工程师更好的理解一些操作的实现。文章基于 Intel 第八代第九代CPU(Coffee Lake 和 Whiskey Lake)进行描述。

第一个问题,什么是 CSME? 这是 Converged Security and Manageability Engine  (我翻译成“集中式安全管理引擎[......]

阅读全文

Force Memory Traing 工具

除了SPD 中给出的参数,在内存初始化时,CPU 还需要有针对性的获得一些参数,而这些参数和生产制造环境温度等等情况有关系(听起来时玄学)。因此,在开机的时候内存控制器会进行一个 Memory Training 的动作。比如,当前内存槽上有2根内存,但是因为线长的原因,同样的信号到达内存的时间不同。在开机的时候,内存控制器就发出一个信号分别给两个内存,内存收到信号后发送一个应答。根据回复的时间不同,内存控制器可以取得一个能够让两个内存都工作正常的时序。当然,这里只是非常粗略的介绍,实际上这个过程非常复杂,耗时也会很久。而Training完成后,BIOS会将取得的参数保存在SPI NOR 上。这[......]

阅读全文

使用 CH567 制作一个USB 键盘

这一次使用 CH567 制作一个USB键盘,参考的对象是Dostyle 的MK60 机械键盘。

同样的,使用 USBlyzer 抓取描述符信息:

USB Composite Device

Connection StatusDevice connectedCurrent Configuration1SpeedFull (12 Mbit/s)Device Address8Number Of Open Pipes2

Device Descriptor Gaming KB

OffsetFieldSizeValueDescription0bLength112h[......]

阅读全文