UEFI dh命令查看系统安装Protocol

UEFI dh命令查看系统安装Protocol

1、如何在UEFI shell下确定当前系统是否有安装某一特定的Protocol?

方法1:添加调试代码,打印看日志

EFI_GUID ProtocolGuid = xxxxxxxx;
VOID    *TestProtocol;
Status = gBS->LocateProtocol(
    &ProtocolGuid,
    NULL,
    (VOID **)&TestProtocol);
if (!EFI_ERROR(Status))
{
    Print(L"[Install] %g\n\r",&ProtocolGuid);
}
else
{
    Print(L"[NOT Install] %g\n\r",&ProtocolGuid);
}

方法2:使用Shell提供的dh命令(见下文)

//显然方法1调试过于繁琐,Shell下提供的dh命令可以直接查询,并不需要我们去写代码调试

2、dh命令基本介绍

列出所有的Handle:dh

请添加图片描述

列出指定Handle的相关信息:dh [Handler] -d

请添加图片描述

列出安装了指定Protocol的Handle:dh -p [ProtocolGuid] 或者dh -p [ProtocolName]

请添加图片描述
注意事项:dh -p [ProtocolGuid] 或者dh -p [ProtocolName]使用的效果是一样的,其中ProtocolName与ProtocolGuid对应关系参考UefiHandleParsingLib.c,一般来说开发调试中我们不会太多的去关注ProtocolName.

3、dh脚本

实际开发过程中由于某些驱动的依赖关系或者硬件未正确初始化,导致相关的Protocol没有安装加载,那么如何去调试某个Protocol是否有加载呢?使用dh -p guid,可以很方便的帮我们在UEFI开发中查看某个Protocol是否有安装加载。


#dh_protocol.nsh

#clear Screen
echo -off
cls

#gEfiShellProtocolGuid
set gEfiShellProtocolGuid  "6302d008-7f9b-4f30-87ac-60c9fef5da4e"
dh -p %gEfiShellProtocolGuid%
echo "  "
echo "  "

#gEfiDxeIpmiTransportProtocolGuid
set  gEfiDxeIpmiTransportProtocolGuid "4a1d0e66-5271-4e22-83fe-90921b748213"
dh -p %gEfiDxeIpmiTransportProtocolGuid%
echo "  "
echo "  "

#exit shell
:ExitShell
exit /b 1
cls
echo -on

请添加图片描述

附录

//如下为笔者Edk开发Code Base,仅供参考
https://gitee.com/hostid/edk2_develop.git
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值