Overview

UEFI Driver Binding Protocol 概述

理解 EDK2 驅動程式如何被動態綁定到設備

🔌

什麼是 Driver Binding Protocol?

⚙️

為什麼需要此機制?

三個核心函式

Supported()

Start()

Stop()

ConnectController() 的角色

內部核心資料結構

IHANDLE 'hand'
Signature
AllHandles
Protocols
Key
PROTOCOL_INTERFACE 'pi'
Signature
Link
Handle
Protocol
Interface
OpenList
PROTOCOL_ENTRY 'pe'
Signature
AllEntries
ProtocolID
Protocols
Notify
三層結構關係圖

ConnectController 逐步流程

1 / 7

DisconnectController / Stop() 逐步流程

1 / 6

實際案例:PCI 設備完整綁定鏈

Layer 0

PCI Host Bridge Driver

EFI_DEVICE_PATH_PROTOCOL EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
Layer 1

PCI Bus Driver

EFI_DEVICE_PATH_PROTOCOL EFI_PCI_IO_PROTOCOL → child handles per PCI device
Layer 2

NVMe Controller Driver

EFI_PCI_IO_PROTOCOL EFI_NVM_EXPRESS_PASS_THRU_PROTOCOL EFI_BLOCK_IO_PROTOCOL
Layer 3

Partition Driver

EFI_BLOCK_IO_PROTOCOL (parent) EFI_BLOCK_IO_PROTOCOL (partition) → child handles per GPT partition
Handle Database — NVMe Binding Chain

關鍵程式碼解析

MdeModulePkg/Core/Dxe/Hand/DriverSupport.c
MdeModulePkg/Core/Dxe/Hand/Handle.c
Example Driver

參考資源