PCI Bus Driver là gì?

Quicknote PCI Bus Driver là gì?

2 phút đọc
Đọc bằng Tiếng Việt English 日本語
PCI / ACPI / SMBIOS Terms cover

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.

01 Root

Start từ Root Bridge

Nhận resource aperture và bus range.

02 Scan

Scan BDF

Đọc Vendor ID, Header Type, Class Code.

03 Bridge

Xử lý bridge

Cấp bus number và bridge window.

04 BAR

Allocate resource

Probe BAR size, assign MMIO/I/O.

05 Handle

Create child handle

Install Device Path và PCI I/O Protocol.

PCI Bus Driver biến topology phần cứng thành handle/protocol trong DXE.

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.

1

Root Bridge đã publish chưa?

Không có root bridge thì PCI Bus Driver không có điểm bắt đầu.

2

Device có Vendor ID hợp lệ không?

0xFFFF nghĩa là scan không thấy endpoint.

3

Child handle có PCI I/O không?

Driver khác thường bind qua EFI_PCI_IO_PROTOCOL.

4

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

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.