Step to UEFI (223)编写自己的 Shell 命令(上)

Shell 下命令代码可以在ShellPkg 中看到,具体的编译方法可以从【参考1】看到,这样的方法在 EDK202008仍然有效。这次实验的目标是编写一个自定义的Shell命令,更具体来说是在 Shell 中加入自定义的 command: lzc, 它的功能只是在屏幕上显示一段字符串表示这个命令已经运行。需要修改的文件如下:

1.UefiShellLevel3CommandsLib.uni  加入了一个帮助信息和显示字符串:

  1. UefiShellLevel3CommandsLib.inf 中[Sources.common]节加入 lzc.c 文件名
  2. UefiShel[......]

    阅读全文

Intel 平台减少 MRC Debug 信息的方法

默认情况下,当我们打开 Debug 功能编译代码后, MRC 部分会输出全部 Debug 信息会导致耗费很长时间才能启动。如果板子散热不好经常会在打印过程中直接断电和重启。为了避免这样的问题,我们需要尽量减少串口的 Debug 信息。作为输出大户,MRC 中的 Debug 信息非常多,所以需要关闭之。

在 MrcDebugPrint.h 中有如下代码,删除 define MRC_DEBUG_PRINT (1) 这一行即可。

在软件工程上有一个特别重要的概念:Design for Debug。对于主板开发来说,同样需要从整体上来考虑。比如,主板需要预留烧写BIOS的接口,否则每次[......]

阅读全文

Step to UEFI (222)BmpSupportLib

很早之前的文章介绍过如何在 Shell 下实实现 BMP 的显示【参考1】。从原理上来说就是读取 BMP 文件,然后进行解析,最后按照 BLT 要求的格式重新排列,最终用EfiBltBufferToVideo就可以显示出来。

最近在查看 EDK202008 的代码时,偶然发现了2个新增的函数在BmpSupportLib.h 文件中。从名称上看一个是将 BMP 转化为 BLT要求的GopBlt格式,另外一个是将 GopBlt 转为 BMP 的。

为此,编写一个测试程序进行测试,因为编译环境是 EDK201903 其中并没有对应的库,所以直接将上面提到的库从 EDK202008 中[......]

阅读全文

Step to UEFI (220)微软提供的 UEFI Shell 截图工具

微软的 MU 项目提供了一个 Shell 下的截图工具:PrintScreenLogger,具体的介绍可以在下面看到:

https://microsoft.github.io/mu/dyn/mu_plus/MsGraphicsPkg/PrintScreenLogger/Readme/#printscreenlogger-operation

我尝试直接在 AppPkg 下编译了一下,可以通过编译。然后在实体机上进行了测试工作正常:

使用方法:

  1. 在你需要存放截图的盘上放置名为 PrintScreenEnable.txt 的文件(空文件即可),运行之后这个工具会将截图结果[......]

    阅读全文

Step to UEFI (221)FASM 编译生成 EFI

之前介绍过使用 Nasm 生成 EFI 程序,这次介绍如何使用 FASM 来生成。

首先,准备 FASM 编译器,可以在 http://flatassembler.net/download.php  下载 Windows版本,例如:flat assembler 1.73.25 for Windows。这个工具不需要安装,解压之后就可以使用。解压后放在C:\BuildBs\fasmw17325目录下。

接下来编译测试 https://github.com/manusov/UEFIusbScan 这个项目的代码,它是 FASM 编写的 Shell 下显示本机 USB Host[......]

阅读全文

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. 编写一个回显程[......]

        阅读全文