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

UEFI设备路径操作函数:完整函数参考手册

UEFI设备路径操作函数:完整函数参考手册

【免费下载链接】edk2EDK II项目地址: https://gitcode.com/gh_mirrors/ed/edk2

UEFI设备路径是UEFI系统中用于标识硬件设备和文件系统位置的关键机制。本文将详细介绍UEFI设备路径的核心操作函数,帮助开发者快速掌握设备路径的创建、转换和管理技巧。

设备路径基础概念

UEFI设备路径通过层级化的节点结构表示硬件设备和文件系统位置。每个设备路径由一个或多个设备节点组成,每个节点包含类型、子类型和数据字段。常见的设备路径类型包括硬件设备路径(如PCI、USB)、ACPI设备路径和媒体设备路径等。

UEFI设备路径节点树结构示意图,展示了从根节点到各层级设备节点的组织关系

设备路径转换核心函数

1. 设备路径转文本函数

ConvertDevicePathToText函数用于将二进制设备路径转换为人类可读的文本格式,定义在MdePkg/Include/Protocol/DevicePathToText.h中:

CHAR16 *EFIAPI ConvertDevicePathToText( IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN BOOLEAN DisplayOnly, IN BOOLEAN AllowShortcuts );

参数说明

  • DevicePath:指向要转换的设备路径
  • DisplayOnly:TRUE表示使用简短显示格式,FALSE表示完整格式
  • AllowShortcuts:TRUE允许使用快捷表示法

使用场景:在调试输出或用户界面中显示设备路径信息。

2. 文本转设备路径函数

ConvertTextToDevicePath函数实现文本到二进制设备路径的转换,定义在MdePkg/Include/Protocol/DevicePathFromText.h中:

EFI_DEVICE_PATH_PROTOCOL *EFIAPI ConvertTextToDevicePath( IN CONST CHAR16 *TextDevicePath );

参数说明

  • TextDevicePath:设备路径的文本表示字符串

使用场景:解析配置文件中的设备路径字符串,创建对应的二进制设备路径。

3. 设备节点操作函数

设备路径由多个设备节点组成,每个节点使用EFI_DEVICE_PATH_PROTOCOL结构体表示:

typedef struct { UINT8 Type; UINT8 SubType; UINT8 Length[2]; } EFI_DEVICE_PATH_PROTOCOL;

常见的设备节点类型包括:

  • 硬件设备路径(Type=0x01):如PCI设备路径PCI_DEVICE_PATH
  • ACPI设备路径(Type=0x02):如ACPI_HID_DEVICE_PATH
  • 媒体设备路径(Type=0x04):如硬盘分区路径HARDDRIVE_DEVICE_PATH

设备路径操作实用技巧

1. 遍历设备路径节点

通过以下代码可以遍历设备路径中的所有节点:

EFI_DEVICE_PATH_PROTOCOL *DevicePath = ...; while (!IsDevicePathEnd(DevicePath)) { // 处理当前节点 switch (DevicePath->Type) { case HARDWARE_DEVICE_PATH: // 硬件设备节点处理 break; case MEDIA_DEVICE_PATH: // 媒体设备节点处理 break; // 其他类型节点处理 } DevicePath = NextDevicePathNode(DevicePath); }

2. 拼接设备路径

使用AppendDevicePath函数可以将两个设备路径拼接在一起:

EFI_DEVICE_PATH_PROTOCOL *AppendDevicePath( IN EFI_DEVICE_PATH_PROTOCOL *Src1, IN EFI_DEVICE_PATH_PROTOCOL *Src2 );

3. 复制设备路径

使用DuplicateDevicePath函数创建设备路径的副本:

EFI_DEVICE_PATH_PROTOCOL *DuplicateDevicePath( IN CONST EFI_DEVICE_PATH_PROTOCOL *OriginalDevicePath );

常见设备路径示例

1. 硬盘分区设备路径

PciRoot(0x0)/Pci(0x1,0x1)/Ata(Primary,Master)/HD(1,MBR,0x0000000000000000,0x0000000000080000,0x0000000007F80000)

2. USB设备路径

PciRoot(0x0)/Pci(0x1D,0x0)/USB(0x0,0x0)/USB(0x1,0x0)

3. 文件路径

PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0x0,0x0)/HD(1,MBR,0x0000000000080000,0x0000000000020000,0x0000000000020000)/File(\EFI\BOOT\BOOTX64.EFI)

总结

UEFI设备路径操作函数是系统固件开发的基础工具,通过DevicePathToTextDevicePathFromText等核心函数,可以实现设备路径的文本转换和解析。掌握这些函数的使用方法,能够帮助开发者更高效地进行UEFI驱动和应用程序开发。

更多详细信息请参考EDK2源码中的设备路径相关头文件:

  • MdePkg/Include/Protocol/DevicePath.h
  • MdePkg/Include/Library/DevicePathLib.h

【免费下载链接】edk2EDK II项目地址: https://gitcode.com/gh_mirrors/ed/edk2

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/542364/

相关文章:

  • JPEXS Free Flash Decompiler开源许可证合规检查工具使用教程:操作指南
  • YOLO12部署避坑指南:软链失效、端口冲突、显存不足三大问题解析
  • 通义千问3-Reranker-0.6B效果对比:不同参数规模的性能差异
  • SDMatte效果惊艳案例:薄纱裙摆动态边缘保留,Alpha通道平滑度实测
  • 新手必看:单线激光雷达外参标定实战指南(附ROS配置步骤)
  • 如何使用Rainmeter监控PCIe设备延迟:完整响应时间检测指南
  • RPA-Python与pytest-dependabot集成:10步实现Dependabot测试自动化完整指南
  • FlatBuffers游戏开发终极指南:如何实现零解析实时数据传输
  • Firecrawl:将任何网站转换为AI就绪数据的终极方案
  • 3重防护构建本地Cookie安全体系:从风险识别到全周期管理
  • JPEXS Free Flash Decompiler开源项目风险管理工具:问题跟踪系统
  • 终极DBeaver多线程查询优先级控制:基于查询类型的动态调整指南
  • Windsurf与Flux MCP:在编码时便利的AI图像生成
  • OpenClaw对接百川2-13B-4bits量化版:本地部署与飞书机器人实战
  • 从PatchGAN到SPADE:一文搞懂图像生成模型的进化之路(附代码对比)
  • 3步实现跨次元游戏模组管理:XXMI启动器的多游戏统一解决方案
  • Postiz合规性指南:如何确保您的社交媒体管理符合GDPR与数据保护法规
  • Postiz图片处理:Sharp图像优化与格式转换终极指南
  • Rainmeter皮肤字体字距调整工具:专业排版软件
  • UEFI变量服务备份策略:定期备份与恢复测试完全指南
  • Windows下OpenClaw对接nanobot:Qwen3-4B模型调用避坑指南
  • 密码学中的冷门武器:连分数在RSA攻击里的神奇应用
  • 7天打造智能助理:OpenClaw+Qwen3-VL:30B飞书开发周计划
  • Swin2SR在Qt框架中的应用:跨平台图像处理软件开发
  • 无需GPU:AI超清画质增强镜像CPU环境快速体验指南
  • YDL-42A立式动平衡机
  • BilibiliDown高效解决方案:突破B站视频下载限制的全方位指南
  • Repomix赞助商支持:Warp与Tuple合作
  • 2026年知名的筒射灯/中山Led射灯/中山筒射灯/Led射灯口碑好的厂家推荐 - 品牌宣传支持者
  • 终极Rainmeter皮肤排版指南:轻松实现段落首字下沉装饰效果