【UEFI实战】Protocol和Handle的简单调试

说明

【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。

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

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值