当前位置: 首页 > article >正文

深入探索UEFI Shell中的dh命令:高效检测系统Protocol安装状态

1. UEFI Shell与dh命令基础认知刚接触UEFI开发时我经常遇到这样的困扰某个驱动明明编译通过了运行时却提示Protocol not found。传统做法是在代码里插入调试语句用gBS-LocateProtocol检查Protocol状态然后重新编译运行——这个过程就像用螺丝刀修手表效率低还容易出错。直到发现UEFI Shell内置的dh命令调试效率直接提升了一个数量级。UEFI Shell是介于固件和操作系统之间的特殊环境相当于PC界的瑞士军刀。它不仅能执行文件操作、内存管理更重要的是提供了直接访问UEFI核心服务的通道。其中dhDump Handle命令就是专门用来诊断系统Handle和Protocol状态的利器。与传统调试方式相比dh命令有三大优势零编码无需修改源代码或重新编译实时性可动态观察Protocol加载状态变化可视化直接显示GUID与名称的映射关系举个例子当我们需要检查EFI_SHELL_PROTOCOL是否加载时传统方式需要写这样的代码EFI_GUID gEfiShellProtocolGuid {0x6302d008,0x7f9b,0x4f30,{0x87,0xac,0x60,0xc9,0xfe,0xf5,0xda,0x4e}}; VOID *ShellProtocol; Status gBS-LocateProtocol(gEfiShellProtocolGuid, NULL, ShellProtocol); if (EFI_ERROR(Status)) { Print(LProtocol not found!\n); }而用dh命令只需要一行dh -p 6302d008-7f9b-4f30-87ac-60c9fef5da4e2. dh命令实战操作指南2.1 基础查询操作在UEFI Shell中输入dh命令时系统会列出当前所有的Handle及其关联的Protocol。这个列表可能长得让人眼花缭乱但掌握几个关键参数就能快速定位问题。列出所有Handle相当于全局视图fs0:\ dh Handle 0000000000000041 [D6A2CB4F-6A18-4E2F-B43B-9920A733700A] Protocol [D6A2CB4F-6A18-4E2F-B43B-9920A733700A] 5.0 Handle 0000000000000042 [3E745226-9818-45B6-A2AC-D7CD0A9B0384] Protocol [3E745226-9818-45B6-A2AC-D7CD0A9B0384] 5.0 ...查询特定Handle的详细信息加-d参数fs0:\ dh 41 -d Handle 0000000000000041 [D6A2CB4F-6A18-4E2F-B43B-9920A733700A] Protocol [D6A2CB4F-6A18-4E2F-B43B-9920A733700A] 5.0 Interface: Revision : 0x00000500 ImageBase : 0x0000000080423000 ImageSize : 0x00000000000400002.2 Protocol专项检测通过GUID查询Protocol最常用场景fs0:\ dh -p 6302d008-7f9b-4f30-87ac-60c9fef5da4e Handle 000000000000003A [6302D008-7F9B-4F30-87AC-60C9FEF5DA4E] Protocol [6302D008-7F9B-4F30-87AC-60C9FEF5DA4E] 2.0通过名称查询Protocol需系统支持fs0:\ dh -p ShellProtocol Handle 000000000000003A [6302D008-7F9B-4F30-87AC-60C9FEF5DA4E] Protocol [Shell] 2.0注意Protocol名称映射关系通常定义在UefiHandleParsingLib.c中不同平台可能有差异。生产环境中建议优先使用GUID。2.3 典型调试场景场景1检查驱动加载状态当某个设备无法工作时先用dh检查相关Protocol是否存在。比如调试USB设备时dh -p 2B2F68D6-0CD2-44CF-8E8B-BBA20B1B5B74 # EFI_USB_IO_PROTOCOL场景2验证Protocol版本某些功能需要特定版本的Protocol支持dh 3A -d | grep Revision场景3诊断内存泄漏通过对比前后两次dh输出的Handle数量变化可以发现未正确释放的资源。3. dh命令高级应用技巧3.1 自动化检测脚本在实际项目中我经常用.nsh脚本批量检查Protocol状态。下面这个脚本可以检测平台关键Protocol是否正常加载# check_protocols.nsh echo -off cls set gEfiGraphicsOutputProtocolGuid 9042a9de-23dc-4a38-96fb-7aded080516a set gEfiSimpleFileSystemProtocolGuid 0964e5b22-6459-11d2-8e39-00a0c969723b set gEfiTcg2ProtocolGuid 607f766c-7455-42be-930b-e4d76db2720f echo Checking essential protocols... dh -p %gEfiGraphicsOutputProtocolGuid% dh -p %gEfiSimpleFileSystemProtocolGuid% dh -p %gEfiTcg2ProtocolGuid% echo -on执行结果类似Checking essential protocols... Handle 000000000000005A [9042A9DE-23DC-4A38-96FB-7ADED080516A] Protocol [9042A9DE-23DC-4A38-96FB-7ADED080516A] 1.0 Handle 0000000000000061 [0964E5B22-6459-11D2-8E39-00A0C969723B] Protocol [0964E5B22-6459-11D2-8E39-00A0C969723B] 2.0 [NOT FOUND] gEfiTcg2ProtocolGuid3.2 组合命令应用结合其他Shell命令可以实现更强大的功能查找所有包含File的Protocoldh | grep -i file统计当前Protocol数量dh | wc -l监测Protocol动态加载每2秒刷新while :; do cls; dh -p 6302d008-7f9b-4f30-87ac-60c9fef5da4e; stall 2000000; done3.3 性能优化建议当系统中有大量Handle时dh命令可能响应缓慢。可以通过以下方式优化精确查询尽量使用-p参数指定具体Protocol限制范围先通过devices命令定位设备Handle再查询特定Handle脚本缓存对静态信息只需查询一次并保存到变量4. 常见问题排查手册4.1 Protocol未加载的可能原因驱动未执行检查驱动是否在正确的DXE阶段加载依赖缺失用deps命令验证依赖Protocol是否就绪版本不匹配某些Protocol需要特定版本号内存不足通过memmap检查可用资源4.2 典型错误处理错误1Invalid Parameterdh -p 123 Error: Invalid GUID format解决方案GUID必须为8-4-4-4-12格式如12345678-1234-1234-1234-123456789abc错误2Not Founddh -p 00000000-0000-0000-0000-000000000000 Error: Protocol not found解决方案检查GUID是否正确或确认对应驱动是否加载错误3Out of Resourcesdh Error: Out of resources解决方案重启Shell或减少其他内存占用4.3 调试案例实录案例ACPI表加载异常症状系统启动时卡在ACPI初始化阶段 排查步骤进入UEFI Shell执行dh -p 8868e871-e4f1-11d3-bc22-0080c73c8881 # ACPI2.0 Protocol发现Protocol未加载检查依赖dh -p 09576e91-6d3f-11d2-8e39-00a0c969723b # ACPI支持库最终定位到某个驱动未正确声明ACPI依赖关系5. 深度技术解析5.1 dh命令工作原理dh命令本质是通过EFI_SYSTEM_TABLE-BootServices的以下服务获取信息LocateHandleBuffer()获取所有HandleHandleProtocol()查询特定ProtocolOpenProtocolInformation()获取详细属性其执行流程如下解析用户输入的参数GUID/Handle调用LocateHandle系列函数获取Handle列表对每个Handle调用ProtocolsPerHandle获取Protocol信息格式化输出结果5.2 与LocateProtocol的对比特性dh命令gBS-LocateProtocol使用环境UEFI Shell任何UEFI环境是否需要编码否是实时性即时生效需重新编译信息详细程度可显示多个Handle仅返回第一个匹配项性能影响较高全表扫描较低哈希查找5.3 扩展应用开发基于dh命令的原理我们可以开发更强大的诊断工具。比如这个简易Protocol监控模块EFI_STATUS MonitorProtocols(EFI_GUID *ProtocolGuid) { UINTN HandleCount; EFI_HANDLE *Handles; gBS-LocateHandleBuffer(ByProtocol, ProtocolGuid, NULL, HandleCount, Handles); for (UINTN i 0; i HandleCount; i) { VOID *Interface; EFI_STATUS Status gBS-OpenProtocol( Handles[i], ProtocolGuid, Interface, gImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL); if (!EFI_ERROR(Status)) { Print(LHandle %p: Active\n, Handles[i]); } } return EFI_SUCCESS; }6. 最佳实践与注意事项6.1 安全操作指南避免生产环境滥用频繁执行dh可能影响系统稳定性敏感信息保护某些Protocol可能包含密钥等敏感数据版本兼容性不同UEFI版本输出的信息格式可能有差异6.2 性能优化建议在脚本中使用echo -off关闭回显提升速度对批量查询使用临时变量存储中间结果优先查询具体Handle而非全表扫描6.3 调试日志记录建议将重要诊断结果保存到文件中dh -p 6302d008-7f9b-4f30-87ac-60c9fef5da4e protocollog.txt7. 资源与扩展阅读7.1 常用Protocol GUID速查表Protocol名称GUID值EFI_SHELL_PROTOCOL6302d008-7f9b-4f30-87ac-60c9fef5da4eEFI_GRAPHICS_OUTPUT9042a9de-23dc-4a38-96fb-7aded080516aEFI_LOADED_IMAGE5b1b31a1-9562-11d2-8e3f-00a0c969723b7.2 开发资源推荐官方文档UEFI Specification Chapter 29 (Shell)开源实现EDK2的ShellPkg模块源码调试工具Intel UEFI Development Kit Debugger在真实的项目调试中dh命令帮我节省了至少30%的Protocol相关问题排查时间。特别是在处理驱动加载顺序问题时通过编写自动化检测脚本可以快速定位到是哪个环节的Protocol没有及时就位。

相关文章:

深入探索UEFI Shell中的dh命令:高效检测系统Protocol安装状态

1. UEFI Shell与dh命令基础认知 刚接触UEFI开发时,我经常遇到这样的困扰:某个驱动明明编译通过了,运行时却提示"Protocol not found"。传统做法是在代码里插入调试语句,用gBS->LocateProtocol检查Protocol状态&#…...

COMSOL能源开采仿真:基质中瓦斯扩散、裂隙中瓦斯渗流,分析不同工况条件下渗透率演化、有效抽...

COMSOL能源开采仿真:基质中瓦斯扩散、裂隙中瓦斯渗流,分析不同工况条件下渗透率演化、有效抽采半径、抽采产量。 使用模块:PDE(基质瓦斯扩散),达西定律/PDE(裂隙瓦斯渗流)&#xff0…...

提升数据抓取效率:用快马AI生成openclaw命令自动化脚本模板

最近在做一个数据抓取项目时,发现手动写openclaw命令实在太费时间了。每次都要重复写类似的fetch和parse命令,还要处理各种异常情况。后来发现用InsCode(快马)平台可以快速生成自动化脚本模板,效率提升了好几倍。今天就把这个经验分享给大家。…...

告别数据迷宫:手把手教你用DataHub搭建企业级元数据搜索中心(支持MySQL/Airflow/Superset)

告别数据迷宫:手把手教你用DataHub搭建企业级元数据搜索中心(支持MySQL/Airflow/Superset) 当数据资产像野草一样在组织内疯长时,工程师们常常发现自己被困在由数百个数据表、数十个BI看板和错综复杂的调度任务构成的迷宫中。上周…...

5分钟掌握终极资源下载神器:res-downloader跨平台智能嗅探工具

5分钟掌握终极资源下载神器:res-downloader跨平台智能嗅探工具 【免费下载链接】res-downloader 资源下载器、网络资源嗅探,支持微信视频号下载、网页抖音无水印下载、网页快手无水印视频下载、酷狗音乐下载等网络资源拦截下载! 项目地址: https://git…...

Noi:整合多 AI 服务的新利器能否突出重围?

Noi:一站式 AI 服务整合新体验Noi 是一款图形用户界面(GUI)应用程序,它的核心亮点在于将所有 AI 服务整合到一处。用户通过单一用户界面(UI)就能访问 ChatGPT、Claude、Gemini、Perplexity 等多个服务&…...

Qwen3-Reranker-0.6B实战:一键部署,轻松提升企业知识库检索准确率

Qwen3-Reranker-0.6B实战:一键部署,轻松提升企业知识库检索准确率 1. 为什么企业需要专业级重排序技术? 在当今信息爆炸的时代,企业知识库的规模正以惊人的速度增长。传统的关键词匹配检索方式已经无法满足精准获取知识的需求。…...

ExifToolGUI完全指南:让照片元数据管理效率倍增的实用技巧

ExifToolGUI完全指南:让照片元数据管理效率倍增的实用技巧 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui 还在为照片位置管理烦恼?这款工具让地理标记效率提升300%。ExifToolGUI作为…...

Go Routine 调度器任务执行机制

Go语言凭借其轻量级线程——Goroutine,成为高并发编程的热门选择。而Goroutine的高效执行,离不开Go调度器的精妙设计。本文将深入探讨Go调度器的任务执行机制,揭示其如何实现高效并发。 **Goroutine的轻量特性** Goroutine相比传统线程更加…...

SPI Flash时序参数详解:如何用Synopsys VIP验证Micron芯片的HOLD时序

SPI Flash时序验证实战:Synopsys VIP在Micron芯片HOLD时序分析中的应用 当硬件验证工程师面对SPI Flash芯片时,时序参数的精确验证往往是项目成败的关键。Micron作为主流存储芯片供应商,其SPI Flash产品广泛应用于嵌入式系统和FPGA设计中&…...

cv_unet_image-colorization效果展示:看AI如何为历史照片智能上色

cv_unet_image-colorization效果展示:看AI如何为历史照片智能上色 1. 引言:让历史重现色彩的魅力 黑白照片承载着珍贵的记忆,但缺乏色彩总让人感觉少了些什么。想象一下,如果能将祖辈的老照片恢复成彩色,看到他们当年…...

SAM3镜像部署:一键启动,开箱即用的文本引导分割工具

SAM3镜像部署:一键启动,开箱即用的文本引导分割工具 1. 快速入门指南 1.1 镜像概述 本镜像基于Meta最新发布的SAM3(Segment Anything Model 3)算法构建,通过二次开发集成了直观的Gradio Web交互界面。无需任何编程基…...

【20年Cython+PyO3专家亲授】:绕过GIL的Python扩展中87%并发崩溃的底层内存模型误用解析

第一章:Python无锁GIL环境下的并发模型报错解决方法Python 的全局解释器锁(GIL)本质上限制了多线程在 CPU 密集型任务中的真正并行性。然而,随着 PyPy、Jython、Cython 以及实验性无 GIL CPython 分支(如 PEP 703 提案…...

一键部署体验:圣女司幼幽-造相Z-Turbo文生图模型效果实测

一键部署体验:圣女司幼幽-造相Z-Turbo文生图模型效果实测 1. 模型简介与部署准备 圣女司幼幽-造相Z-Turbo是一款基于Z-Image-Turbo模型的LoRA微调版本,专门用于生成《牧神记》中角色"圣女司幼幽"的高质量图像。该模型通过Xinference框架部署…...

零代码部署GEMMA-3像素工作站:复古界面下的多模态AI体验

零代码部署GEMMA-3像素工作站:复古界面下的多模态AI体验 1. 开篇:当JRPG美学遇上多模态AI 想象一下,90年代经典日式角色扮演游戏的像素风格界面,与现代最先进的多模态AI技术完美融合——这就是GEMMA-3像素工作站带给我们的独特体…...

小白挖漏洞必备的两个平台!有技术就能挖,没有上限,光靠挖洞月入1w+的都大有人在!_漏洞挖掘提交网站。

今天给大家推荐两个新手挖漏洞最合适的两个平台,有技术就能上,没有啥门槛,挖多赚多,练技术的同时把钱给赚了。 01补天 https://hack.zkaq.cn/ 这个平台应该是我推荐最多的,上面光靠挖漏洞月入几万的都大有人在 我有个…...

Swin2SR模型可解释性:理解超分决策过程

Swin2SR模型可解释性:理解超分决策过程 1. 引言 当我们使用Swin2SR这样的超分辨率模型时,经常会惊叹于它能够将模糊的低分辨率图像转换为清晰的高分辨率图像。但你是否好奇过,这个"AI显微镜"是如何做出这些决策的?它是…...

Comsol模拟混凝土中水分传递 低气压下水分转移引起的水泥浆龄期微观结构变化 低气压(AP)...

Comsol模拟混凝土中水分传递 低气压下水分转移引起的水泥浆龄期微观结构变化 低气压(AP)会影响混凝土中的水分传递,进而影响其微观结构和体积特性,但对其热力学机制却知之甚少 可文献复现 水泥基材料内部的水分运动会直接改变孔隙…...

POV-RAY入门指南 - 从零开始掌握光线追踪(1)

1. 初识POV-Ray:光线追踪的艺术 第一次打开POV-Ray时,我被它生成的金属球反射效果震撼到了——桌面上那个虚拟球体竟然能精确反射出周围环境的每处细节,连窗框的倒影都清晰可见。这种基于物理的光线追踪技术,正是好莱坞大片特效的…...

M2LOrder模型跨操作系统部署:从Windows到Linux的兼容性实战

M2LOrder模型跨操作系统部署:从Windows到Linux的兼容性实战 你是不是也遇到过这种情况?在Windows电脑上跑得好好的一个AI服务,想迁移到Linux服务器上,结果各种报错,环境依赖、路径问题、权限设置……折腾半天也搞不定…...

不只是PointNet++:盘点那些依赖pointnet2_ops_lib的热门点云项目(PCT/SnowflakeNet)及一键配置心得

点云深度学习生态中的关键组件:pointnet2_ops_lib深度解析与实战指南 在三维视觉领域,点云数据处理一直是研究热点。不同于传统图像数据,点云具有无序性、稀疏性和非结构化的特点,这给深度学习模型的设计带来了独特挑战。PointNet…...

AUTOSAR配置实战:从ARXML到代码,详解Pre-compile与Post-build变体如何影响你的MCAL生成

AUTOSAR配置实战:Pre-compile与Post-build变体对MCAL生成的深度影响 在汽车电子开发中,AUTOSAR架构的配置管理一直是工程师面临的核心挑战之一。特别是在基础软件层(BSW)开发阶段,如何选择合适的配置变体(V…...

Cursor试用限制如何解决?go-cursor-help工具三合一方案详解

Cursor试用限制如何解决?go-cursor-help工具三合一方案详解 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Youve reached your trial request limit. / Too many free trial accounts used on this machine. Please upgrade to pro…...

广汽埃安品牌车型AION UT在奥地利麦格纳工厂正式量产启动并成功下线 | 美通社头条

、美通社消息:3月18日,广汽欧洲业务发展迎来重要里程碑——旗下埃安品牌车型AION UT在奥地利麦格纳(Magna)工厂正式实现量产启动(SOP)并成功下线,标志着广汽在欧洲本地化战略迈入实质性推进阶段。AION UT是广汽欧洲本地化战略的重要核心车型&…...

轻量级字体解决方案:资源受限环境中的中文字体优化实践

轻量级字体解决方案:资源受限环境中的中文字体优化实践 【免费下载链接】LxgwWenKai LxgwWenKai: 这是一个开源的中文字体项目,提供了多种版本的字体文件,适用于不同的使用场景,包括屏幕阅读、轻便版、GB规范字形和TC旧字形版。 …...

STEP3-VL-10B WebUI教程:自定义快捷提示词模板+一键插入常用指令

STEP3-VL-10B WebUI教程:自定义快捷提示词模板一键插入常用指令 你是不是每次用多模态AI模型时,都要重复输入那些固定的指令?比如“请详细描述这张图片”、“帮我分析这个图表的数据”、“用中文回答”……一遍又一遍地打字,不仅…...

实战指南:基于快马生成tomcat生产级配置,涵盖https、集群与性能调优

今天想和大家分享一个实战经验:如何在生产环境中配置Tomcat服务器。作为一个长期和Tomcat打交道的开发者,我深知生产环境配置和本地开发环境的巨大差异。最近在InsCode(快马)平台上实践了一套完整的配置方案,效果很不错,这里把关键…...

Claude Code架构深度解析:从核心文件到Harness的确定性控制体系

前言 Claude Code凭借强大的代码理解、编辑与执行能力,成为AI研发工程师的高效工具,但多数使用者仅停留在功能调用层面,对其底层架构尤其是核心控制层Harness知之甚少。作为Claude Code架构师,本文将从项目架构视角,拆…...

5个技巧让旧MacBook Pro重获新生:OpenCore Legacy Patcher完全指南

5个技巧让旧MacBook Pro重获新生:OpenCore Legacy Patcher完全指南 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 随着科技的快速迭代,许多经典Ma…...

LAV Filters:让Windows播放任何视频格式的5大优势与安装教程

LAV Filters:让Windows播放任何视频格式的5大优势与安装教程 【免费下载链接】LAVFilters LAV Filters - Open-Source DirectShow Media Splitter and Decoders 项目地址: https://gitcode.com/gh_mirrors/la/LAVFilters 你是否曾经遇到过在Windows电脑上无法…...