UEFI实战——Protocol,Handle以及简单调试

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiangwei0512/article/details/88367287

说明

BIOS/UEFI基础——Protocol介绍中介绍了Protocol的基本内容。

本文主要介绍如何在Shell下查看各类Protocol以及相关的Handle,从而根据它来解决一些实际的问题。

Shell下相关命令介绍

下面简单介绍下Shell下会使用到的调试命令。

dh

首先是dh命令:

该条命令显示BIOS启动过程中创建的所有的Handle。下面是命令执行之后的一个结果(非全部):

以上是dh命令不加参数时的显示结果。当加上参数时,可以更加明确显示内容:

handle:它是一个十六进制的值,就是上图中每一行的第一个数字,它就是一个Index,仅用于指定所有安装的Handles中的一个,下面是加入handle参数之后的显示结果:

这时的显示是很简单的,为了显示更多的内容,可以增加-d参数。

-d:它将显示Handle上的Protocol对应的驱动的信息,下面是一个例子:

其中第一个行显示在Index之后的是真正的Handle的值(不过其实意义不大),之后显示的就是对应Protocol相关的驱动信息。

还有一种方式是直接寻找安装了某个Protocol的所有Handles,这时需要使用参数-p:

-p xxx:xxx可以是Protocol名称或者对应的GUID,下面是一个例子:

这里需要注意,Protocol名称和GUID的对应关系是函数GetStringNameFromGuid()来获取的,而真正的对应关系位于ShellPkg\Library\UefiHandleParsingLib\UefiHandleParsingLib.c,其中维护了很大的一张表。从这里也可以看出来,由于存在某些Protocol没有在该表有对应关系,就导致了某些显示只能是GUID,比如下面的例子:

此时在使用-p的时候就要指定GUID了:

其它还有几个参数,重要性不是很大,有空再研究。

devices/devtree

这两个命令用来显示的是UEFI Drivers这类特定的驱动以及相关的Handles。

关于这两个函数没有特别的参数需要介绍,直接使用即可,下面是相关的例子。

devices:

这里各列的意义如下:

devtree:

openinfo

openinfo指定一个参数,这个参数就是前面提到的Handle的Index,然后显示在这个Handle上打开的Protocol。下面是一个例子:

它显示了当前Handle使用的Protocols。

它也没有特别的参数需要介绍。

猜你喜欢

转载自blog.csdn.net/jiangwei0512/article/details/88367287