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