EDK II Module là gì?

Quicknote giải thích module trong EDK II.

3 phút đọc
Đọc bằng Tiếng Việt English 日本語
EDK II Terms cover

Một EDK II Module là đơn vị build cơ bản trong EDK II. Nó có source code, một file INF mô tả metadata, module type, entry point, dependency, library, package và PCD.

Khi đọc source BIOS, đừng chỉ mở .c. Hãy mở .inf trước hoặc song song, vì INF mới cho biết module này thật sự được build và link như thế nào.

Mục Giá trị Ghi chú
BASE Library/base module Không tự chạy như driver/application.
PEIM PEI module Chạy trong PEI, thường publish/consume PPI, tạo HOB.
DXE_DRIVER DXE driver Chạy trong DXE, publish/consume Protocol.
UEFI_APPLICATION UEFI app Có thể chạy từ UEFI Shell hoặc boot manager.
DXE_SMM_DRIVER SMM driver Chạy trong SMM, cần cẩn thận về communication/security.

Một module đi từ source tới runtime như thế nào?

Bước 1

INF mô tả module

Tên, GUID, type, entry point, source, library, package, PCD.

Bước 2

DSC chọn module để build

Platform đưa INF vào [Components] và map library instance.

Bước 3

FDF đưa module vào image

Module được đóng vào firmware volume phù hợp.

Bước 4

Dispatcher hoặc Shell load module

PEI/DXE dispatcher gọi entry point khi dependency thỏa; UEFI app chạy khi được load.

Ví dụ module không chạy

Bạn thêm MyDxe.c, build pass, flash BIOS, nhưng không thấy log:

DEBUG ((DEBUG_INFO, "MyDxe Entry\n"));

Hướng kiểm tra:

  1. MyDxe.infENTRY_POINT đúng không?
  2. MyDxe.inf có trong DSC [Components] không?
  3. MyDxe.inf có trong FDF/FV không?
  4. DEBUG level có bị tắt bởi DebugLib hoặc PCD không?
  5. DEPEX có đang chờ một protocol chưa bao giờ được install không?

Module dùng code của module khác

Trong EDK II, module không nên gọi trực tiếp C file của module khác như project C nhỏ. Nên tách phần dùng chung thành library, publish header qua DEC, rồi module consume khai báo library class trong INF.

Shared logic

Library Instance

Library Class

Module INF consume

DSC map implementation

Checklist khi tạo module mới

Ghi nhớ nhanh

EDK II Module là đơn vị build và dispatch. Muốn hiểu một module, hãy đọc theo cặp: .inf cho metadata, .c cho logic, rồi lần sang DSC/FDF để biết nó có thật sự được build và chạy không.

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.