UEFI 中的 SATA DevicePath 命名不一致

问题描述 投票:0回答:1

我正在尝试在 UEFI 中区分各种 SATA 磁盘。我尝试使用 DevicePath 来实现此目的。我使用协议 gEfiDevicePathProtocolGuid 来检索 DevicePath,然后通过 ConvertDevicePathToText 函数将其转换为文本。 问题是命名不一致。有时 DevicePath 的 SATA 部分有 3 个字段,有时只有 2 个。

BlockIO 句柄的设备路径如下所示:

PciRoot(0x0)/Pci(0x1F,0x2)/

Sata(0x1,0x0)/高清...

SimpleFileSystem 句柄的 DevicePath 看起来像这样:

PciRoot(0x0)/Pci(0x1F,0x2)/

Sata(0x1,0xFFFF,0x0)/高清...

UEFI规范说数字0xFFFF是PMPN(端口倍增器),默认值为0xFFFF,如果没有端口倍增器,则可选。 有没有办法可靠地获取具有相同格式的 DevicePath(PMPN 字段是否始终存在或始终被忽略)?我尝试通过比较 DevicePath 的 Sata 部分来区分物理磁盘,但由于这种不一致,我无法这样做。

c x86-64 bios uefi edk2
1个回答
0
投票
函数

ConvertDevicePathToText 生成不同的输出。 看起来来自内置协议的转换器创建了无效路径(缺少 0xffff 字段),而来自 EDK2 库的转换器是有效的。

CHAR16 *InvalidDevicePath = 0; CHAR16 *ValidDevicePath = 0; Status = gBS->LocateProtocol( &gEfiDevicePathToTextProtocolGuid, NULL, (VOID**)&Device2TextProtocol ); if (EFI_ERROR(Status)) { return -1; } InvalidDevicePath = Device2TextProtocol->ConvertDevicePathToText(DiskDevicePath, FALSE, FALSE); // Sata(0x1,0x0) ValidDevicePath = ConvertDevicePathToText(DiskDevicePath, FALSE, FALSE); // Sata(0x1,0xFFFF,0x0)
    
© www.soinside.com 2019 - 2024. All rights reserved.