文章目录
一、概述
1.设备路径的主要目的是允许应用程序(如操作系统加载程序)确定接口正在抽象的物理设备。
2.ACPI中定义了设备路径的集合叫做命名空间(name space),EFI定义了自己的命名空间叫设备路径。
二、 EFI Device Path Protocol
typedef struct _EFI_DEVICE_PATH_PROTOCOL {
UINT8 Type; //< 0x01 Hardware Device Path.
//< 0x02 ACPI Device Path.
//< 0x03 Messaging Device Path.
//< 0x04 Media Device Path.
//< 0x05 BIOS Boot Specification Device Path.
//< 0x7F End of Hardware Device Path.
UINT8 SubType; //< 因类型而异
//< 0xFF 结束整个设备路径
//< 0x01 结束当前实例设备路径并开始一个新的设备路径
UINT8 Length[2]; //大小为整个结构体
UINT8 data[n];
} EFI_DEVICE_PATH_PROTOCOL;
1. 0x01 Hardware Device Path
Sub-Type 1 PCI
Sub-Type 2 PCCARD
Sub-Type 3 – Memory Mapped
Sub-Type 4 – Vendor
Sub-Type 5 – Controller
Sub Type 6 – BMC
2. 0x02 ACPI Device Path
Sub-Type 1 ACPI Device Path
Sub-Type 2 Expanded ACPI Device Path
Sub-Type3 _ADR Device Path //视频输出相关
3. 0x03 Messaging Device Path
Sub-Type 1 – ATAPI
Sub-Type 2 – SCSI
Sub-Type 3 – Fibre Channel //光纤通道
Sub-Type 21 – Fibre Channel Ex
Sub-Type 4 – 1394
Sub-Type 5 – USB
例子:PciRoot(0)/PCI(31,2)/USB(1,0)/USB(3,0) 路径描述:ACPI/PCI(D:31,F:2)/USB HUB/USB 详细请看spec
Sub-Type 18 – SATA
Sub-Type 16– USB WWID
Sub-Type 17 – Device Logical unit
Sub-Type 15 - USB Class
Sub-Type 6 – I2O Random Block Storage Class
Sub-Type 11 – MAC Address for a network interface
Sub-Type 12 – IPv4
Sub-Type 13 – IPv6
Sub-Type 9 – InfiniBand
Sub-Type 14 – UART
Sub-Type 10 – Vendor
根据Vendor GUID不同包含UART Flow Control Messaging,SCSI (SAS)等设备路径
Sub-Type 19 – (iSCSI)
Sub-Type 20 – Vlan (802.1q)
Sub-type 22 SAS Ex
Sub Type 23 – NVM Express Namespace
Sub Type 24 – Universal Resource Identifier (URI) Device Path
Sub-Type 25 – UFS (Universal Flash Storage)
Sub-Type 26 – SD
Sub-Type 27 – Bluetooth
Sub Type 28 – Wi-Fi Device Path
Sub-Type 29 – eMMC
Sub-Type 30 – BluetoothLE
Sub-Type 31 – DNS Device Path
Sub-type 32 - NVDIMM Namespace
Sub-Type 32– REST Service Device Path
4. 0x04 Media Device Path
UEFI模式下启动项路径定义在如下设备路径
Sub-Type 1 – Hard Drive
Sub-Type 2 – CD-ROM “El Torito” Format
Sub-Type 3 – Vendor
Sub-Type 4 – File Path
Sub-Type 5 – Media Protocol
Sub-Type 6 – PIWG Firmware File
Sub-Type 7 – PIWG Firmware Volume
Sub-Type 8 – Relative Offset Range
Sub Type 9 – RAM Disk Device Path
5. 0x05 BIOS Boot Specification Device Path
Legacy模式下启动项路径
6. 0x7F End of Hardware Device Path
三 、Device Path Utilities Protocol
创建和操作设备路径和设备节点
typedef struct _EFI_DEVICE_PATH_UTILITIES_PROTOCOL {
EFI_DEVICE_PATH_UTILS_GET_DEVICE_PATH_SIZE GetDevicePathSize;
EFI_DEVICE_PATH_UTILS_DUP_DEVICE_PATH DuplicateDevicePath;
EFI_DEVICE_PATH_UTILS_APPEND_PATH AppendDevicePath;
EFI_DEVICE_PATH_UTILS_APPEND_NODE AppendDeviceNode;
EFI_DEVICE_PATH_UTILS_APPEND_INSTANCE AppendDevicePathInstance;
EFI_DEVICE_PATH_UTILS_GET_NEXT_INSTANCE GetNextDevicePathInstance;
EFI_DEVICE_PATH_UTILS_IS_MULTI_INSTANCE IsDevicePathMultiInstance;
EFI_DEVICE_PATH_UTILS_CREATE_NODE CreateDeviceNode;
} EFI_DEVICE_PATH_UTILITIES_PROTOCOL;
GetDevicePathSize
返回指定设备路径的大小,以字节为单位
DuplicateDevicePath
复制设备路径结构
AppendDeviceNode
将设备节点追加到指定的设备路径
AppendDevicePath
将设备路径附加到指定的设备路径
AppendDevicePathInstance
将设备路径实例附加到另一个设备路径
GetNextDevicePathInstance
从设备路径数据中检索下一个设备路径实例结构
IsDevicePathMultiInstance
如果这是一个多实例设备路径,则返回TRUE
CreateDeviceNode
为指定类型和子类型的设备节点分配内存
四 、设备路径二进制与文本转换
机器识别的二进制路径与人类可以阅读的文本之间的转换,为了文本不会转换错误,有一些规则。
1.EFI_DEVICE_PATH_TO_TEXT_PROTOCOL
将设备节点和路径转换为文本
typedef struct _EFI_DEVICE_PATH_TO_TEXT_PROTOCOL {
EFI_DEVICE_PATH_TO_TEXT_NODE ConvertDeviceNodeToText;
EFI_DEVICE_PATH_TO_TEXT_PATH ConvertDevicePathToText;
} EFI_DEVICE_PATH_TO_TEXT_PROTOCOL;
2.EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL
将文本转换为设备路径和设备节点
typedef struct _EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL {
EFI_DEVICE_PATH_FROM_TEXT_NODE ConvertTextToDevicNode;
EFI_DEVICE_PATH_FROM_TEXT_PATH ConvertTextToDevicPath;
} EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL;
总结
后续有更深理解,会继续补充。
学艺不精,错误请指正;
如有侵权,请联系删除。
参考文档: 《UEFI_Spec_2_9_2021_03_18》