Driver Binding Flow là gì?
Giải thích Supported, Start, Stop trong UEFI Driver Model và cách nó ảnh hưởng quá trình enumerate thiết bị.
Trong DXE, driver không chỉ “chạy một lần”. Với bus/device driver, firmware dùng Driver Binding Protocol để hỏi driver có hỗ trợ controller không, sau đó mới start driver trên controller đó.
Có hỗ trợ controller này không?
Kiểm tra protocol/device ID/controller state.
Attach và publish protocol
Mở controller, tạo child handle hoặc install protocol.
Detach/cleanup
Đóng protocol và gỡ resource khi cần.
Ví dụ thực tế
Một PCI storage controller xuất hiện, nhưng disk không lên boot menu. Có thể PCI bus driver đã enumerate controller, nhưng storage driver Supported() trả fail vì class code không khớp, hoặc Start() fail khi mở MMIO/BAR.
| Mục | Giá trị | Ghi chú |
|---|---|---|
| Supported() | Probe nhẹ | Không nên allocate lớn hoặc thay đổi state quá nhiều. |
| Start() | Thực sự bind | Install Block I/O, Disk I/O, Device Path, child handle... |
| Stop() | Unbind | Cần cleanup đúng để reconnect/disconnect không lỗi. |
Common pitfall
Driver entry point có chạy không đồng nghĩa với device đã được support. Entry point thường chỉ install EFI_DRIVER_BINDING_PROTOCOL. Phần attach thật sự xảy ra khi firmware gọi Supported() và Start().
Checklist Driver Binding
Bài liên quan
- UEFI Driver Model là gì?
- Supported trong UEFI Driver Model là gì?
- Start trong UEFI Driver Model là gì?
- Stop trong UEFI Driver Model là gì?
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.
UEFI Driver Model là gì?
UEFI Driver Model là mô hình tách biệt driver khỏi controller cụ thể. Thành phần trung tâm là Driver Binding Protocol với Supported/Start/Stop.
Start() trong UEFI Driver Model là gì?
Start() là nơi driver bind vào controller: open BY_DRIVER, install protocol, tạo child handle nếu là bus driver. Hiểu cleanup fail path và anti-pattern làm handle database bẩn.
Stop() trong UEFI Driver Model là gì?
Stop() là cleanup đối xứng của Start(). Hiểu CloseProtocol, uninstall protocol, NumberOfChildren, destroy child handle và anti-pattern làm DisconnectController fail.
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.