Device Pathとは?
BIOS/UEFIおよびembedded firmware学習者向けにDevice Pathを説明するクイックノート。
UEFI の Device Path は、device、controller、partition、boot file までの「経路」を表す仕組みです。C:\Windows のような文字列 path ではなく、Device Path Node の binary sequence です。各 node は Type、SubType、Length、そして node ごとの data を持ちます。
簡単に言うと、filesystem path は volume の中の file の場所を示します。一方 Device Path は、firmware がその volume と file に到達するまでの経路も含めて示します。
Node の構造
Device Path node は共通 header から始まります。
typedef struct {
UINT8 Type;
UINT8 SubType;
UINT8 Length[2];
} EFI_DEVICE_PATH_PROTOCOL;
| Field | 意味 | debug 時に見る点 |
|---|---|---|
Type | hardware、ACPI、messaging、media などの大分類 | この node はどの階層を表しているか |
SubType | 具体的な node 種別 | PCI、USB、SATA、HD、FilePath など |
Length | header を含む node 全体の長さ | 間違うと parser が次の node を読めなくなる |
| Data | node 固有の情報 | device/function、partition GUID、file path など |
クイックチェックリスト
Boot#### の実例
Windows の boot option では、次のような device path が見られます。
PciRoot(0x0)
/Pci(0x17,0x0)
/Sata(0x0,0xFFFF,0x0)
/HD(1,GPT,xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,0x800,0x100000)
/\EFI\Microsoft\Boot\bootmgfw.efi
| Node | 意味 | 確認したい値 |
|---|---|---|
PciRoot(0x0) | PCI root bridge 0 | 多くの場合 main root complex |
Pci(0x17,0x0) | PCI device/function | 0x17 が device number、0x0 が function |
Sata(...) | SATA controller/port path | port/controller 変更で path が無効になることがある |
HD(...) | loader がある partition | partition number、GPT GUID/signature、start LBA、size |
\EFI\...\bootmgfw.efi | FilePath node | firmware が開く .efi file |
重要なのは、Device Path は単に「bootmgfw.efi を開く」と言っているだけではない点です。そこへ到達するための controller と partition も含んでいます。
よくある失敗例
Disk clone、EFI System Partition の再作成、BIOS update、CMOS clear の後、Boot#### variable 自体は残っていても、内部の Device Path が古くなることがあります。この場合 Boot Manager は variable を読めますが、参照先の partition/file を開けません。見える症状は「boot option が消えた」「別の Windows Boot Manager で起動する」「No bootable device」などです。
覚えておくポイント
Device Path は firmware 用の binary map です。DevicePathToText() はそれを人間向けの文字列に変換するだけで、firmware は structured node をたどって device に到達します。
関連ノート
- Device Path Nodeとは?
- FilePath Device Path Nodeとは?
- HD Device Path Nodeとは?
- PCI Device Path Nodeとは?
- BootOrderとは?
公開参考資料
- UEFI Specification 2.11 - Device Path Protocol
- UEFI Specification 2.11
- UEFI PI Specification 1.9
- EDK II source code
この記事は役に立ちましたか?
ファームウェア、BIOS/UEFI、組み込みシステムを学んでいる人に共有できます。
Nội dung liên quan
Một số bài viết, ghi chú hoặc project có liên quan đến nội dung bạn vừa đọc.
Boot####、BootOrder、BootNextとは?
BIOS/UEFIおよびembedded firmware学習者向けにBoot####、BootOrder、BootNextを説明するクイックノート。
BDSとは?
BIOS/UEFIおよびembedded firmware学習者向けにBDSを説明するクイックノート。
Boot Failure Checklistとは?
BIOS/UEFIおよびembedded firmware学習者向けにBoot Failure Checklistを説明するクイックノート。
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.