Device Path Node là gì?
Quicknote Device Path Node là gì?
Khi firmware nói “boot từ ổ này”, nó không thể chỉ lưu một chuỗi kiểu C:\boot\loader.exe.
Trong UEFI, firmware cần mô tả đường đi theo từng lớp phần cứng: root bridge, PCI controller, USB/SATA/NVMe controller, partition, rồi mới tới file .efi.
Mỗi mảnh nhỏ trong đường đi đó được gọi là Device Path Node.
Nói ngắn gọn: Device Path là một chuỗi node, còn Device Path Node là một mắt xích trong chuỗi đó.
PciRoot
Bắt đầu từ PCI root bridge do ACPI/firmware mô tả.
Pci / USB / SATA
Đi qua controller hoặc bus cụ thể.
HD
Chọn đúng partition chứa EFI System Partition.
FilePath
Trỏ tới file boot loader như bootmgfw.efi hoặc BOOTX64.EFI.
Mỗi node có những trường gì?
Một node UEFI luôn có phần header chung: Type, SubType, Length. Sau header là dữ liệu riêng của từng loại node. Ví dụ PCI node có Device và Function, còn HD node có partition number, start LBA, size và signature.
| Mục | Giá trị | Ghi chú |
|---|---|---|
| Type | Nhóm node lớn | Ví dụ Hardware, ACPI, Messaging, Media, End. |
| SubType | Loại node cụ thể trong nhóm | Ví dụ PCI trong Hardware, USB trong Messaging, HD trong Media. |
| Length | Độ dài node | Quan trọng khi parser nhảy sang node tiếp theo. Length sai dễ làm cả chuỗi bị đọc lệch. |
| Data | Payload riêng | Tùy node: PCI dùng Device/Function, HD dùng LBA/signature, FilePath dùng chuỗi UTF-16. |
Type/SubType thường gặp
| Mục | Giá trị | Ghi chú |
|---|---|---|
| 0x01 Hardware | PCI, PCCARD, MemoryMapped | Mô tả đường qua phần cứng hoặc controller. |
| 0x02 ACPI | ACPI HID/UID | Thường dùng ở đầu path để mô tả root bridge hoặc device ACPI. |
| 0x03 Messaging | USB, SATA, NVMe, MAC, IPv4/IPv6 | Mô tả giao thức/bus để đi tới thiết bị. |
| 0x04 Media | HD, CD-ROM, FilePath | Mô tả partition, file boot hoặc media object. |
| 0x7F End | End Instance / End Entire | Đánh dấu kết thúc một instance hoặc toàn bộ device path. |
Ví dụ thực tế
Một boot option Windows có thể chứa device path dạng text như sau khi convert bằng DevicePathToText:
PciRoot(0x0)/Pci(0x17,0x0)/Sata(0x0,0x0,0x0)/HD(1,GPT,3F2A...,0x800,0x100000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)
Đọc theo mắt kỹ sư firmware:
PciRoot(0x0) root bridge
└─ Pci(0x17,0x0) SATA/NVMe/Storage controller trên PCI
└─ Sata(0x0,0x0,0x0) thiết bị storage phía sau controller
└─ HD(1,GPT,3F2A...,...) partition chứa ESP
└─ File(\EFI\...efi) file loader thật sự
Nếu lỗi nằm ở node đầu, firmware có thể không thấy controller. Nếu lỗi nằm ở HD, firmware thấy disk nhưng không match đúng partition. Nếu lỗi nằm ở FilePath, firmware thấy partition nhưng không mở được loader.
Khi debug BIOS nên nhìn gì?
Device Path Node là nơi rất dễ bị xem nhẹ vì nó chỉ là metadata. Nhưng trong BDS, metadata này quyết định firmware sẽ mở controller nào, partition nào và file nào.
Checklist debug Device Path Node
Ghi nhớ nhanh
Đừng nghĩ Device Path Node là một khái niệm nhỏ. Trong boot flow, nó giống từng đoạn địa chỉ mà firmware phải đi qua trước khi tìm được loader. Một node sai có thể làm cả Boot#### nhìn vẫn tồn tại trong NVRAM nhưng thực tế không còn boot được.
Bài liên quan
- FilePath Device Path Node là gì?
- HD Device Path Node là gì?
- PCI Device Path Node là gì?
- USB Device Path Node là gì?
- DevicePathToText là gì?
Nguồn tham khảo public
Thấy nội dung này hữu ích?
Lưu lại hoặc chia sẻ cho người cũng đang học firmware, BIOS/UEFI và embedded systems.
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.
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.