PCI Bus Driver là gì?
Quicknote PCI Bus Driver là gì?
Trong EDK2, PCI Bus Driver là thành phần đi qua PCI hierarchy, đọc config space, tạo child handle cho thiết bị PCI/PCIe và publish EFI_PCI_IO_PROTOCOL để driver khác có thể bind.
Nếu nhìn từ ngoài, bạn thấy “firmware nhận thiết bị PCI”. Nhưng bên trong DXE, PCI Bus Driver là người làm phần lớn công việc enumeration/resource.
Start từ Root Bridge
Nhận resource aperture và bus range.
Scan BDF
Đọc Vendor ID, Header Type, Class Code.
Xử lý bridge
Cấp bus number và bridge window.
Allocate resource
Probe BAR size, assign MMIO/I/O.
Create child handle
Install Device Path và PCI I/O Protocol.
Debug diary: driver khác không bind vào device
Nhiều khi lỗi không nằm ở driver của bạn. Nếu PCI Bus Driver chưa tạo child handle hoặc chưa install EFI_PCI_IO_PROTOCOL, driver của bạn sẽ không có controller để bind.
Root Bridge đã publish chưa?
Không có root bridge thì PCI Bus Driver không có điểm bắt đầu.
Device có Vendor ID hợp lệ không?
0xFFFF nghĩa là scan không thấy endpoint.
Child handle có PCI I/O không?
Driver khác thường bind qua EFI_PCI_IO_PROTOCOL.
Resource đã được assign chưa?
Không có BAR/resource thì Start() có thể fail.
EDK2 mental map
PCI Bus Driver mental map
MdeModulePkg/Bus/Pci/PciBusDxe
├─ Enumerate PCI root bridge
├─ Scan bus/device/function
├─ Detect bridge and endpoint
├─ Allocate BAR and bridge window
├─ Install Device Path Protocol
└─ Install EFI_PCI_IO_PROTOCOL Checklist PCI Bus Driver
Bài liên quan
- PCI Architecture Overview
- PCI Configuration Space là gì?
- BDF trong PCIe là gì?
- BAR trong PCIe là gì?
- PCI Resource Allocation 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.