SEC Phase là gì?

Giải thích SEC Phase trong BIOS/UEFI: môi trường thực thi tối thiểu, temporary RAM, cache-as-RAM, SEC handoff sang PEI và debug early boot.

Cập nhật 21 phút đọc
Đọc bằng Tiếng Việt English 日本語
Firmware Flow cover

SEC, viết tắt của Security Phase, là phase rất sớm trong PI/UEFI firmware flow. Đây là phase nằm ngay sau reset vector và trước PEI. Nếu reset vector là điểm CPU bắt đầu fetch instruction, thì SEC là nơi firmware tạo môi trường thực thi tối thiểu để có thể bước vào PEI một cách an toàn.

Nói ngắn gọn: SEC Phase là phase dựng nền cực sớm cho PEI, trước khi DRAM và UEFI services đầy đủ sẵn sàng.

Ở thời điểm SEC:

  • Boot Services chưa tồn tại
  • Runtime Services chưa tồn tại
  • Protocol Database chưa tồn tại
  • Handle Database chưa tồn tại
  • BDS chưa tồn tại
  • BootOrder chưa được xử lý
  • Filesystem chưa tồn tại
  • DRAM có thể chưa init đầy đủ
  • Stack bình thường có thể chưa sẵn
  • Debug log rất hạn chế

Vì vậy SEC là phase nhỏ nhưng rất quan trọng. Nếu SEC làm sai, PEI không vào được. Nếu PEI không vào được, DXE, BDS, Shell và OS boot đều không có cơ hội chạy.

SEC nằm ở đâu trong firmware flow?

SEC nằm giữa reset vector và PEI

Power On / Reset
├─ Reset Vector
│  └─ CPU fetch instruction đầu tiên
├─ SEC Phase
│  ├─ Early CPU setup
│  ├─ Temporary execution environment
│  ├─ Temporary stack / temporary RAM
│  ├─ Locate firmware volume / PEI Core
│  └─ Handoff to PEI
├─ PEI Phase
│  ├─ PEIM dispatch
│  ├─ Silicon init
│  ├─ DRAM init
│  └─ HOB creation
├─ DXE Phase
│  └─ Driver / Protocol / Services
└─ BDS / OS Loader / Runtime

Nếu debug boot fail ở giai đoạn rất sớm, câu hỏi cần hỏi là:

CPU đã qua reset vector chưa?
SEC đã tạo được temporary environment chưa?
SEC đã handoff sang PEI chưa?

SEC làm những việc gì?

SEC không làm quá nhiều việc như DXE. Nhưng những việc SEC làm là nền móng.

Nhiệm vụ chính của SEC Phase
Nhiệm vụ Mô tả Nếu lỗi thì sao
Nhận control từ reset vector Code rất sớm bắt đầu đi vào firmware flow Không vào PEI
Thiết lập CPU state tối thiểu Chuẩn bị mode/state để chạy code tiếp Crash/reset loop
Thiết lập temporary memory Có vùng tạm để dùng stack/data nhỏ Không gọi được code C an toàn
Thiết lập temporary stack Cho phép gọi function/PEI entry Stack corruption
Tìm PEI Core Locate PEI Core trong firmware volume SEC handoff fail
Truyền tham số sang PEI Pass temporary RAM info, boot firmware volume, context PEI init sai
Early debug checkpoint POST code/serial rất sớm Không biết chết ở đâu
Security root tùy platform Có thể thực hiện verify/measure rất sớm Boot bị chặn rất sớm

Timeline SEC đơn giản

01 Reset

Reset vector

CPU fetch instruction đầu tiên từ firmware.

02 Entry

SEC entry

Early code chuyển vào SEC.

03 Temp

Temporary memory

SEC tạo stack/tạm memory, thường trước DRAM đầy đủ.

04 Locate

Locate PEI Core

SEC tìm PEI Core hoặc firmware volume chứa PEI.

05 Handoff

SEC to PEI

SEC truyền context và gọi PEI Core.

06 PEI

PEI starts

PEI bắt đầu dispatch PEIM và init DRAM.

SEC đưa firmware từ reset vector tới PEI Core.

Vì sao cần SEC?

Người mới thường hỏi: “Sao không nhảy thẳng từ reset vector vào PEI?”

Lý do: PEI cần một môi trường tối thiểu để chạy. Ở thời điểm reset, hệ thống còn quá thô. SEC giúp dựng phần tối thiểu đó.

Vì sao không vào PEI ngay?
Vấn đề sau reset SEC xử lý ra sao PEI nhận được gì
Không có stack bình thường Tạo temporary stack PEI có thể chạy code C
DRAM chưa init Dùng temporary RAM/cache-as-RAM PEI có workspace ban đầu
CPU state chưa phù hợp Thiết lập CPU state tối thiểu PEI chạy ổn định hơn
Chưa biết PEI Core nằm đâu Locate firmware volume/PEI Core Entry PEI đúng
Debug rất hạn chế POST/early serial nếu có Biết checkpoint sớm
Security early tùy platform Verify/measure nếu cần PEI chỉ chạy nếu trust OK
Reset context rất nghèo Tạo handoff context PEI có thông tin ban đầu
Platform init chưa có Làm ít nhất cần thiết PEI tiếp tục silicon init

Temporary memory trong SEC

Một nhiệm vụ quan trọng nhất của SEC là tạo temporary memory hoặc temporary stack trước khi DRAM usable đầy đủ.

Tùy platform, temporary memory có thể đến từ:

  • Cache-as-RAM
  • SRAM nội bộ
  • Scratchpad memory
  • On-chip memory
  • Vùng tạm đặc thù của SoC
  • Một cơ chế platform-specific khác
Temporary memory trong SEC
Loại Ý nghĩa Bug thường gặp
Cache-as-RAM Dùng CPU cache như RAM tạm CAR setup sai, stack lỗi
SRAM/on-chip RAM Dùng RAM nội bộ của SoC Base/size sai
Scratchpad Vùng memory nhỏ cho early boot Không đủ size
Temporary stack Stack cho early C code Stack overflow/corrupt
Temporary heap nhỏ Một số platform cho phép allocate tối thiểu Assume quá nhiều memory
Handoff temp info SEC báo PEI vùng tạm ở đâu PEI dùng sai address
Temp to permanent migration Sau DRAM init phải chuyển stack/data Migration bug
Debug buffer Log tạm nếu có Log quá nhiều làm tràn buffer

Cache-as-RAM là gì trong ngữ cảnh SEC?

Cache-as-RAM, thường gọi tắt là CAR, là kỹ thuật dùng cache CPU như một vùng RAM tạm trước khi DRAM được init. Không phải platform nào cũng dùng cùng một cách, nhưng mental model là: firmware cần một vùng memory nhỏ để có stack/data, và cache có thể được cấu hình tạm để phục vụ mục đích đó.

Cache-as-RAM nhìn từ debug
Câu hỏi Vì sao quan trọng Nếu sai thì sao
CAR base/size đúng không? Stack/data tạm nằm ở đó Stack corruption
CPU cache mode đúng chưa? Cache phải hoạt động như RAM tạm Random crash
Multiple core xử lý thế nào? AP/BSP state khác nhau Race hoặc corrupt
Có flush/migration đúng không? Sau DRAM init phải chuyển sang memory thật Data mất hoặc stale
Stack có đủ không? Call chain early có thể sâu Crash không rõ log
Có debug write quá nhiều không? Log buffer/stack nhỏ Timing/corruption
Security policy có ảnh hưởng không? Debug unlock/CAR config Early fail
Platform library đúng instance không? Build dùng sai lib Không boot trên board thật

SEC handoff sang PEI

SEC cần gọi PEI Core và truyền thông tin ban đầu. Handoff này là một boundary quan trọng.

Một handoff thường cần các nhóm thông tin:

  • Temporary RAM base/size
  • Boot firmware volume hoặc PEI firmware volume
  • Entry point PEI Core
  • Stack/temporary memory state
  • Boot context rất sớm
  • Platform-specific context nếu có
01 Temp

Temporary memory ready

SEC đã có stack/tạm memory.

02 FV

Find PEI FV

SEC tìm firmware volume chứa PEI Core.

03 Core

Locate PEI Core

Entry PEI Core được xác định.

04 Args

Prepare handoff args

Pass temporary RAM và boot FV context.

05 Call

Call PEI Core

Control chuyển từ SEC sang PEI.

06 POST

PEI checkpoint

POST/early log xác nhận PEI đã vào.

SEC handoff sang PEI là boundary đầu tiên cần debug rõ.
SEC to PEI handoff debug
Handoff item Cần kiểm tra Bug nếu sai
PEI Core entry Address đúng không Không vào PEI
Boot firmware volume FV base/header/checksum PEI không tìm PEIM
Temporary RAM base Address hợp lệ không Stack/data sai
Temporary RAM size Đủ cho PEI early không Stack overflow
Stack pointer Nằm trong temp RAM không Crash khi gọi function
CPU state Mode/state phù hợp không Exception/reset
Handoff structure Format đúng với PEI Core expected không PEI parse sai
POST before/after Có checkpoint ở boundary không Khó biết chết ở đâu

SEC và PEI khác nhau thế nào?

SEC vs PEI
Tiêu chí SEC PEI
Vị trí Ngay sau reset vector Sau SEC
Mục tiêu Dựng môi trường tối thiểu Init silicon/DRAM và tạo HOB
Memory Temporary memory Temporary rồi permanent memory sau DRAM init
Module model SEC Core/early code PEIM/PPI
Data handoff Truyền context sang PEI Tạo HOB cho DXE
Debug POST/early serial/trace PEI debug log/HOB dump
Services Chưa có UEFI services PEI Services/PPI, chưa có Boot Services DXE
Bug impact Không vào PEI Không vào DXE hoặc DXE data sai

SEC và Reset Vector khác nhau thế nào?

Reset Vector vs SEC
Tiêu chí Reset Vector SEC
Bản chất Điểm CPU fetch instruction đầu tiên Phase firmware rất sớm
Kích thước logic Rất nhỏ, thường jump/stub Có logic dựng môi trường
Mục tiêu Bắt đầu execution Chuẩn bị để vào PEI
Memory Gần như chưa có gì Tạo temporary memory/stack
Debug POST đầu tiên/trace/SPI POST/early serial/SEC log nếu có
Nếu lỗi CPU không vào firmware flow Không handoff sang PEI
Source Reset vector assembly/layout SEC core/temporary RAM code
Liên hệ Nhảy vào SEC Nhận control từ reset vector

SEC có security không?

Tên SEC là Security Phase, nhưng không nên hiểu đơn giản là “phase Secure Boot”. Secure Boot image verification thường rõ hơn ở DXE/BDS khi load image. Tuy nhiên, một số platform có root-of-trust, measurement hoặc authentication rất sớm quanh SEC/reset.

Security trong hoặc quanh SEC
Cơ chế Ý nghĩa Debug
Root of Trust Tin cậy bắt đầu từ code rất sớm Platform-specific
Firmware authentication Chỉ chạy firmware hợp lệ Fail rất sớm
Measured boot Đo firmware vào trust chain Measurement log nếu có
Boot Guard/verified boot Chặn firmware bị sửa Reset/shutdown/recovery
Recovery policy Chuyển sang recovery nếu main fail Recovery checkpoint
Debug policy Khóa/mở JTAG/trace Debug unlock state
Manufacturing mode Cho phép provisioning Mode flag/strap
Anti-rollback Chặn firmware cũ Version policy

Debug signal ở SEC

Debug signal trong SEC
Signal Dùng để làm gì Hạn chế
POST code Checkpoint rất sớm Cần hardware support
Early serial Log text nếu UART init được Clock/pinmux/base có thể chưa đúng
JTAG/TRACE Xem instruction và register Có thể bị khóa
SPI analyzer Xem flash fetch Không thấy logic software đầy đủ
Reset reason Phân biệt watchdog/reset cause Cần đọc register được
GPIO toggle Checkpoint tối giản Rất thô
Build map So address/entry/FV Không phải runtime signal
Recovery behavior Biết security/layout fail không Policy dependent

POST code nên đặt ở đâu trong SEC?

POST code gợi ý cho SEC
Checkpoint Ý nghĩa Nếu không thấy
0x10 reset vector reached CPU fetch được firmware Flash/reset vector issue
0x11 SEC entry Reset vector nhảy được vào SEC Jump/entry issue
0x12 CPU early setup done CPU setup tối thiểu OK CPU mode/config issue
0x13 temporary memory start Bắt đầu setup temp memory CAR/SRAM init chưa chạy
0x14 temporary memory ready Stack/tạm RAM ready CAR/SRAM setup lỗi nếu không thấy
0x15 locate PEI FV SEC đang tìm PEI firmware volume FV layout/header issue
0x16 PEI Core found Entry PEI xác định PEI Core missing nếu không thấy
0x20 PEI entered SEC handoff thành công Handoff/call/stack issue nếu không thấy

SEC bug thường gặp

Bug thường gặp trong SEC
Bug Triệu chứng Hướng debug
Temporary memory setup sai Crash/reset trước PEI POST temp memory, trace CAR
Stack pointer sai Crash khi gọi function Check stack range
PEI Core không tìm thấy Không có PEI checkpoint FV layout/header
Firmware volume base sai SEC locate FV fail FDF/FD map
CPU mode/setup sai Exception/reset loop Trace CPU state
Early serial sai Không log nhưng POST chạy UART base/clock/pinmux
Build sai library instance Boot trên emulator OK, board fail Platform DSC/FDF
Security early fail Reset/recovery rất sớm Verified boot policy
Handoff args sai PEI vào rồi crash SEC to PEI params
Stack quá nhỏ Crash khi bật log thêm Reduce log, stack analysis

SEC và firmware image layout

SEC phụ thuộc rất nhiều vào layout firmware image. Nếu reset vector vào được SEC nhưng SEC không tìm được PEI, bạn nên kiểm tra FDF/FD/FV map.

SEC phụ thuộc firmware layout

Firmware Image
├─ Reset Vector / Boot Block
│  └─ Jump to SEC
├─ SEC Core / SEC entry
│  └─ Temporary execution setup
├─ PEI Firmware Volume
│  ├─ PEI Core
│  ├─ MemoryInit PEIM
│  └─ Platform PEIMs
├─ DXE Firmware Volume
│  └─ DXE Core / DXE drivers
└─ Variable / Recovery / Platform regions
Layout sai ảnh hưởng SEC thế nào?
Lỗi layout Triệu chứng Debug
SEC entry sai offset Reset vector không vào SEC Disassemble reset area
PEI FV base sai SEC không tìm PEI Core FDF/FD map
PEI Core missing Không vào PEI FV dump
FV header/checksum sai SEC reject FV FV validation
Alignment/padding sai Entry/FV parse fail Build report
Image sai SKU Security/platform check fail Board ID/SKU
Recovery region overlap Recovery không chạy Flash map
Variable store overlap NVRAM corrupt sau boot Region boundaries

SEC trên emulator và board thật khác nhau ra sao?

Một lỗi phổ biến: code chạy trên OVMF/QEMU nhưng không chạy trên board thật. Vì SEC phụ thuộc mạnh vào platform.

SEC trên emulator vs board thật
Khía cạnh Emulator Board thật
Temporary memory Có thể đơn giản hơn CAR/SRAM/platform-specific
Flash mapping Ổn định, dễ kiểm soát SPI descriptor/chipset mapping
Serial Dễ dùng UART pinmux/clock/base phụ thuộc board
Security early Có thể không bật Boot Guard/verified boot/debug lock
Reset reason Đơn giản Power/watchdog/platform reset
Timing Ít hardware timing thật Clock/power/training timing thật
Debug GDB/log dễ hơn Trace/JTAG/POST cần setup
Image layout OVMF-specific Board FDF/FD/SKU-specific

Debug Diary: không vào PEI sau khi thêm log SEC

Bạn thêm vài dòng log vào SEC. Trước đó board boot, sau đó board reset trước PEI.

Khả năng:

  • Stack tạm quá nhỏ
  • Serial print dùng buffer/stack lớn
  • Timing thay đổi
  • UART init chưa an toàn
  • Log function dùng memory chưa sẵn
  • Code size/layout thay đổi làm entry/FV lệch nếu layout nhạy

Checklist thêm log SEC làm không boot

Debug Diary: SEC tìm không thấy PEI Core

Triệu chứng:

POST 0x11 SEC entry
POST 0x14 temporary memory ready
Không thấy POST 0x20 PEI entered

Root cause có thể SEC không locate được PEI Core hoặc PEI firmware volume.

Checklist SEC không tìm thấy PEI Core

Debug Diary: PEI vào rồi crash ngay

Nếu checkpoint đầu PEI xuất hiện nhưng crash ngay sau đó, lỗi có thể nằm ở boundary SEC to PEI.

Có thể:

  • Stack tạm quá nhỏ
  • Temporary RAM info sai
  • PEI Core nhận sai boot firmware volume
  • CPU state chưa phù hợp
  • Handoff parameter format sai
  • PEI dùng memory mà SEC chưa setup đúng
  • Debug log trong PEI dùng serial chưa init đúng

Checklist PEI vào rồi crash ngay

Debug Diary: Board reset theo chu kỳ cố định ở SEC

Nếu board reset sau một khoảng thời gian gần như cố định, nghi watchdog hoặc platform reset policy.

Checklist reset theo chu kỳ ở SEC

Anti-pattern khi viết/debug SEC

Anti-pattern trong SEC
Anti-pattern Vì sao sai Cách sửa
Dùng DEBUG print quá sớm Serial/stack chưa sẵn Dùng POST trước
Assume DRAM usable DRAM chưa init Dùng temp RAM đúng cách
Dùng buffer lớn trên stack Stack tạm nhỏ Giảm stack hoặc dùng vùng tạm có kiểm soát
Gọi library phức tạp Có thể cần services/memory chưa có Dùng library SEC-safe
Không kiểm tra build layout SEC phụ thuộc FV/FD map So FDF/FD report
Log error quá muộn Chết trước log Checkpoint ở boundary
Không phân biệt SEC và PEI Debug sai phase Đặt POST ở entry/exit
Bypass security early trong lab rồi quên Rủi ro production Tách lab/production config

Instrumentation nên có trong SEC

Instrumentation cho SEC
Instrumentation Nên đặt ở đâu Mục tiêu
POST reset reached Reset vector CPU fetch firmware
POST SEC entry Đầu SEC Reset vector jump OK
POST temp memory start Trước setup CAR/SRAM Biết bắt đầu temp memory
POST temp memory ready Sau setup stack/temp Biết có môi trường tối thiểu
POST PEI locate start Trước tìm PEI Core Debug FV locate
POST PEI found Sau locate PEI Core Entry PEI có sẵn
POST PEI entered Đầu PEI SEC handoff OK
Minimal serial Sau UART init an toàn Log build/version/reset reason tối thiểu

SEC debug playbook

SEC debug playbook

Security checklist cho SEC

Security checklist trong SEC

Khi đọc source nên tìm gì?

Source reading checklist cho SEC
Cần hiểu Nơi tìm Câu hỏi
SEC entry SecCore, SecMain, SecEntry SEC bắt đầu ở function nào?
Reset to SEC jump ResetVector assembly Reset vector nhảy tới SEC ra sao?
Temporary memory CacheAsRam, TempRam, SRAM init Stack/tạm memory setup thế nào?
PEI locate FindFv, PeiCore entry locate SEC tìm PEI Core bằng cách nào?
Handoff args SecCoreData, handoff structure PEI nhận tham số gì?
Stack setup Stack base/top constants Stack size đủ không?
Serial/POST PostCodeLib, SerialPortLib Debug sớm có an toàn không?
FDF/FD map FDF, DSC, build report SEC/PEI FV nằm đúng offset không?
Security early Platform verified boot libs Có check nào trước PEI không?
Library instances DSC library mapping Board thật dùng đúng lib chưa?

Câu hỏi tự kiểm tra

Tự kiểm tra sau khi đọc note này

Blog seeds

  • SEC Phase là gì? Môi trường đầu tiên trước PEI
  • Cache-as-RAM trong SEC: vì sao cần RAM tạm?
  • SEC to PEI handoff debug như thế nào?
  • Vì sao thêm log ở SEC có thể làm firmware chết sớm?
  • SEC khác Reset Vector và PEI như thế nào?

Bài liên quan

Nguồn tham khảo public

Bài viết này hữu ích với bạn?

Bạn có thể chia sẻ cho người đang học firmware, BIOS/UEFI, embedded systems hoặc ủng hộ tác giả.

Góp ý

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.