DSC trong EDK II là gì?
Quicknote giải thích file DSC trong EDK II.
DSC là Platform 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ỹ.
Chọn module build
Danh sách INF được đưa vào [Components].
Chọn implementation
Map LibraryClass sang Library Instance.
Set policy/config
Override giá trị PCD theo platform.
Điều chỉnh compiler/linker
Debug flag, warning level, optimization, define...
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
Vì sao link error thường liên quan DSC?
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
- INF trong EDK II là gì?
- DEC trong EDK II là gì?
- FDF trong EDK II là gì?
- Library Class và Library Instance là gì?
- PCD trong EDK II 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.