EDK2 202008 来了

今天偶然注意到edk2 的最新版本:edk2-stable202008

https://github.com/tianocore/edk2/releases/tag/edk2-stable202008 可以下载到。

从资料上看,目前 Windows 下的编译工具已经切换到了 VS2019。

这个版本是 2020 九月 四日 Release 的,改动如下:

推荐《从零开始的UEFI裸机编程》

最近偶然看到这本书,大概浏览了一下,非常适合初学者阅读。

从零开始的UEFI裸机编程
フルスクラッチで作る!UEFIベアメタルプログラミング

大神 祐真 著, 神楽坂琴梨 译

本书的目录:

  1. 从零开始的UEFI裸机编程
  2. 译者的话
  3. 1. 第一部分
    1. 1.1. 引言
    2. 1.2. Hello UEFI!
      1. 1.2.1. 遵循UEFI标准编写程序
      2. 1.2.2. 交叉编译为UEFI可执行格式
      3. 1.2.3. 引导并运行UEFI应用程序
    3. 1.3. 获取按键输入
      1. 1.3.1. 简单文本输入协议
      2. 1.3.2. 编写一个回显程[......]

        阅读全文

Step to UEFI (219)Windows 下的 IoApic

前面介绍了 Shell 下的 IoApic 的读写,这次研究一下 Windows 下面的。在 Windows 下面,我们可以直接使用 RW_Everything 来进行读取,设定如下:

读取结果如下:

我们特别关注 0x12 偏移处的值为 0x980 (这台机器和之前的 WinDBG 调试的不是同一个机器,IoApic 不同)。我猜测这里是PS/2 keyboard 的 IRQ0。参照资料修改 Bit16 (Interrupt Mask),设置为1会 Disable 这个中断。于是 x012 会被写为 0x0001 0980,这时候我发现键盘无法工作了。

测试的这[......]

阅读全文

Step to UEFI (218)UEFI Shell下读取 IoApic

最近在编写一个Shell 下读取 IoApic 的工具,首先实验直接调用 IoApicLib来实现,为此,在 AppPkg.dsc 中加入下面三个 Lib:

之后在自己的App 中引用IoApicLib。但是这样编译出来的EFI 在运行期会死机,甚至没有运行到 Application第一行就会死机。经过研究发现在 DxeAcpiTimerLib.inf 中有如下设定:

因此,DxeAcpiTimerLibConstructor会先于我们的Application入口执行,其中的代码会导致运行时死机(但是具体原因我没有分析)。

所以,需要手工编写一个读取的工具。

首[......]

阅读全文

ESP32 测试EC11旋转编码器

最近研究了一下旋转编码器的使用。入手的是 ALPS EC11系列的:

为了让它工作,自己做了电路板电阻配合【参考1】。电路图和 PCB 设计如下:

工程可以在这里下载:

软件方面使用了ai-esp32-rotary-encoder 库,下面是一个同时使用2个旋转编码器的例子(特特别注意:不是任何的GPIO 都能选择成为和旋转编码器连接的引脚,某些连接之后会导致无法启动,有可能是因为部分ESP32在启动时会选做接口VSPI,如果你了解原因不妨在评论中指出。谢谢! ):

上述测试代码:

库可以在这里下载:

测试的照片:

参考[......]

阅读全文

AdaFriut 库驱动 ILI9431

之前在 Teensy上使用过 ILI9341 的屏幕【参考1】,这次在 FireBeelte(ESP32)上使用这个屏幕,相比之下 ESP32 可以很轻松的使用 40Mhz的SPI 频率。

连接如下:

ILI9341屏幕GNDVCCCLKMOSRESDCBLKMISFireBeelteGNDVCC (推荐) 3.3V也可以SCK/IO18MOSI/IO23D2/IO25D9/IO2NAMISO/IO19ILI9341 对 FireBeelte(ESP32)的连接

在程序开头有2种定义方式:

1.类似  Adafruit_ILI9341 tft = Adafru[......]

阅读全文

Step to UEFI (217)UEFI Shell 下读获取分区信息

最近看到 Github 上的Intel Hao Wu 提供了一个读取“EFI Partition Infomation Protocol”的工具,在 https://github.com/hwu25/edk2/tree/partition_info_test/MdeModulePkg/Application/DumpPartInfo 可以看到(https://github.com/hwu25/edk2 branch:partition_info_test)。于是进行了一番研究。

首先对于 Partition Information Protocol 可以在 UEFI Spec 2.7 中[......]

阅读全文

WinDBG 分析键盘生成的 Dump 文件

本文介绍如何使用USB 键盘在 Windows 下生成一个 Dump 文件,然后通过工具进行分析。

在【参考1】,微软提供了一个使用键盘触发蓝屏生成 Dump 文件的方法。具体操作是:

1.对于 USB 键盘,需要在注册表:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\kbdhid\Parameters 下面创建 CrashOnCtrlScroll 类型为 REG_DWORD ,值为0x01:

2.重启之后可以通过按下右侧 ctrl 然后快速按下2次 Scroll 键实现蓝屏:

3.重启后在被测机的 W[......]

阅读全文

WinDBG 查看 PEP Table

检查 PEP  Table 是Modern Standby 调试过程中必不可少的一环。通常的做法是运行 PEPChecker 这个工具,然后根据结果修改 PEPD  设定。此外还可以使用RW 或者其他工具读取 ACPI DSDT ,但是这样的做法看到的是静态的信息并没有办法得知运行期的值。这次介绍使用 WinDBG 查看测试机的 PEPD 设定,本质上是 WinDDBG ACPI Debug,在 RS2/3 上进行 ACPI Debug 会比较麻烦【参考1】,但是从 Win 10  1803 开始,MS 修改了Windows,不再需要替换文件(“For Windo[......]

阅读全文