DSC trong EDK II là gì?

Quicknote giải thích file DSC trong EDK II.

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

DSCPlatform Description. Nếu INF là lời khai của từng module, thì DSC là quyết định của platform: build module nào, dùng library instance nào, set PCD ra sao và áp dụng build option nào.

Khi một module build được trong package sample nhưng fail trong platform thật, DSC thường là nơi cần đọc rất kỹ.

01 Modules

Chọn module build

Danh sách INF được đưa vào [Components].

02 Libraries

Chọn implementation

Map LibraryClass sang Library Instance.

03 PCD

Set policy/config

Override giá trị PCD theo platform.

04 BuildOptions

Điều chỉnh compiler/linker

Debug flag, warning level, optimization, define...

DSC là nơi platform biến các module rời rạc thành một cấu hình build cụ thể.

Ví dụ DSC tối giản

[Defines]
  PLATFORM_NAME           = MyBoard
  PLATFORM_GUID           = 33333333-4444-5555-6666-777777777777
  DSC_SPECIFICATION       = 0x00010005
  OUTPUT_DIRECTORY        = Build/MyBoard
  SUPPORTED_ARCHITECTURES = X64
  BUILD_TARGETS           = DEBUG|RELEASE
  SKUID_IDENTIFIER        = DEFAULT

[LibraryClasses]
  UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
  DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
  BoardConfigLib|MyPkg/Library/BoardConfigLib/BoardConfigLib.inf

[PcdsFixedAtBuild]
  gMyPkgTokenSpaceGuid.PcdEnableVerboseLog|TRUE
  gMyPkgTokenSpaceGuid.PcdUartBaudRate|115200

[Components]
  MyPkg/Drivers/MyDxe/MyDxe.inf

Module khai báo:

[LibraryClasses]
  BoardConfigLib

nhưng DSC không map:

BoardConfigLib|MyPkg/Library/BoardConfigLib/BoardConfigLib.inf

thì build system không biết lấy implementation ở đâu. Kết quả có thể là lỗi không tìm thấy instance hoặc link error.

PCD như build option

PCD rất hữu ích khi bạn muốn bật/tắt feature hoặc đổi policy mà không sửa C code.

Trong C:

if (FeaturePcdGet (PcdEnableVerboseLog)) {
  DEBUG ((DEBUG_INFO, "Verbose feature path enabled\n"));
}

Trong DSC:

[PcdsFeatureFlag]
  gMyPkgTokenSpaceGuid.PcdEnableVerboseLog|TRUE

Với cách này, cùng một module có thể build cho nhiều platform khác nhau. Platform A bật verbose log, platform B tắt để giảm size hoặc giảm noise log.

Mục Giá trị Ghi chú
[Components] Module nào được build Có INF nhưng không nằm trong DSC thì platform đó có thể không build module.
[LibraryClasses] Library class map tới instance nào Nguồn gốc của nhiều lỗi unresolved/link error.
[PcdsFixedAtBuild] Set giá trị build-time Giống build option được quản lý bằng EDK II.
[BuildOptions] Compiler/linker options Có thể ảnh hưởng warning, debug info, optimization.

Build pass nhưng ROM không có driver?

DSC chỉ đảm bảo module được build. Để driver nằm trong firmware image, cần kiểm tra FDF. Đây là điểm rất hay nhầm:

INF có trong DSC  → module được build
INF có trong FDF  → module được đóng vào FV/ROM

Nếu serial log không thấy driver entry point, hãy kiểm tra cả hai.

Checklist DSC

Ghi nhớ nhanh

DSC là nơi platform trả lời: “tôi build cái gì, với library nào, với cấu hình nào”. Khi lỗi không nằm ở C syntax mà nằm ở build/link/config, hãy đọc DSC rất sớm.

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.