在实模式下,内存寻址是通过 “段寄存器:偏移” 来进行的。保护模式出现之后,因为内存地址长度的增加,这样的方式无法完成(不够长)。为了解决这样的使用索引来处理成为顺理成章的事情。
同时为了考虑兼容性,最终引入了Global Descriptor Table 来进行扩展。关于内存的地址信息存[......]
在实模式下,内存寻址是通过 “段寄存器:偏移” 来进行的。保护模式出现之后,因为内存地址长度的增加,这样的方式无法完成(不够长)。为了解决这样的使用索引来处理成为顺理成章的事情。
同时为了考虑兼容性,最终引入了Global Descriptor Table 来进行扩展。关于内存的地址信息存[......]
之前介绍过 UDK201903,这一段的实验也都是基于这个版本的。最近发现有更新的 UDK201905。在https://github.com/tianocore/edk2/releases/tag/edk2-stable201905
可以看到。增加了如下特性:
最近在实验屏幕PSR功能的时候碰到一个诡异的问题。具体现象就是:鼠标可以打开桌面上的一个目录,然后就出现鼠标可以移动但是不能点击任何内容的情况。这个时候键盘仍然是可以使用的。
起初我怀疑是系统装了很多乱七八糟的软件导致的问题。然后将这个硬盘换到其他的机器上就没有这样的现象了。接下来就怀疑BIO[......]
最近在编写代码的时候遇到一个非常奇怪的问题,经过化简,出现问题的代码如下:
INF 如下:
错误提示为:
百思不得其解,不知道这么简单的一句话为什么会导致这样奇怪的问题。有兴趣的朋友可以先花费三分钟思考一下。
忽然想起来最近学到的一个 VS 编译指令 /P 【[......]
最近 Krishna 做了一个能够读取分析 UEFI Shell 下屏幕历史信息的工具。比如,你想得到某一个 Application 的输出结果,可以先让他运行一次,然后用这个工具抓取之前的输出结果。
在 https://puravidaapps.com/qr.php 给出了一个实现的例子。这个例子的特点是不依赖网络,直接再手机本地生成:
AIA文件下载
我使用的是2018离线版的 App Inventor ,美中不足的是中文和英文术语对照起来挺折腾。
[......]
NT32Pkg 是简单方便的虚拟机,很多情况下可以帮助我们验证一些功能。最近研究了一下这个虚拟机中按键功能的实现。
在 \Nt32Pkg\WinNtGopDxe\WinNtGopInput.c 的WinNtGopInitializeSimpleTextInForWindow 函数中可以看到如下[......]
最近在重温书本从基础的寄存器看起。进入64位的时代之后,EAX 之类的寄存器直接被扩展为64位【参考1】:
看到这里忽然想起来一个问题:如何在UEFI 下输出当前通用寄存器比如RAX的值?为了这个目标进行了一番研究。
首先,看看 Print 是如何工作的。为了达成这个目标,使用之前提[......]
最近遇到了 DRRS 的问题。总结如下:
作为 BIOS 工程师,如果想支持这个功能,第一件要做的事情是:和Panel 厂商确认屏幕是支持这个功能的。
DRRS 是 Display Refresh Rate Switching的缩写,通过降低笔记本上内置屏幕刷新频率达到省电的目的。
[......]
在 Setup 中有一个显示当前加载的CPU
Micro Code 的版本的选项。比如,在 EDK2 的代码中有如下片段:
\Vlv2TbltDevicePkg\PlatformSetupDxe\Main.vfi
对应实现的代码: \Vlv2TbltDevi[......]