Reset Vector là gì?

Giải thích reset vector trong BIOS/UEFI: CPU bắt đầu chạy firmware từ đâu, flash mapping, SEC handoff, lỗi early boot và cách debug.

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

Khi bạn bấm nút nguồn, CPU không tự nhiên biết DRAM ở đâu, disk ở đâu, OS nằm ở đâu hay BootOrder là gì. CPU chỉ biết một điều rất nhỏ: sau reset, nó phải bắt đầu fetch instruction từ một địa chỉ cố định hoặc một reset entry do kiến trúc quy định.

Địa chỉ hoặc entry point đầu tiên đó thường được gọi là reset vector.

Nói ngắn gọn: reset vector là điểm bắt đầu thực thi firmware sau khi CPU reset.

Ở thời điểm reset vector:

  • Chưa có DXE
  • Chưa có Boot Services
  • Chưa có protocol
  • Chưa có Handle Database
  • Chưa có BDS
  • Chưa có BootOrder
  • Chưa có filesystem
  • DRAM có thể chưa dùng được
  • Log có thể chưa có
  • Stack bình thường có thể chưa sẵn sàng

Vì vậy reset vector là vùng rất nhỏ nhưng cực kỳ quan trọng. Nếu code không đi qua được đoạn này, toàn bộ UEFI flow phía sau sẽ không bao giờ xuất hiện.

Reset vector nằm ở đâu trong firmware flow?

Reset vector là điểm đầu của firmware execution flow

Power On / Reset
├─ Reset Vector
│  └─ CPU fetch instruction đầu tiên
├─ SEC
│  └─ Thiết lập môi trường tối thiểu
├─ PEI
│  └─ Khởi tạo memory, HOB, silicon cơ bản
├─ DXE
│  └─ Driver dispatch, protocol, services
├─ BDS
│  └─ Boot option, device connect, LoadImage
├─ OS Loader
│  └─ GetMemoryMap, ExitBootServices
└─ Runtime
└─ OS dùng runtime services nếu cần

Nếu ví firmware flow như một cuốn sách, reset vector là chữ đầu tiên mà CPU đọc.

Reset vector giải quyết câu hỏi gì?

Reset vector trả lời các câu hỏi nền tảng:

Reset vector giúp trả lời câu hỏi gì?
Câu hỏi Ý nghĩa debug Nếu sai thì sao
CPU bắt đầu chạy ở đâu? Biết instruction đầu tiên nằm ở vùng nào CPU không vào firmware
Flash có được map đúng không? CPU fetch được code từ SPI/ROM không Reset loop hoặc treo rất sớm
Reset entry có nhảy đúng không? Code đầu tiên có chuyển tới SEC không Không vào PEI/DXE
Stack tạm có chưa? Có thể gọi C code không Crash sớm
Early debug có bật chưa? Có POST/serial không Không thấy log
Firmware image layout đúng không? Reset vector trỏ đúng firmware volume không Fetch sai data
CPU mode/setup ban đầu đúng không? Assembler/early CPU setup chạy được không Triple fault/reset
Reset cause là gì? Cold reset, warm reset, watchdog Debug nhầm nguyên nhân

CPU reset xong làm gì?

Mỗi kiến trúc CPU có quy tắc reset riêng. Nhưng mental model chung là:

Reset asserted
  -> CPU registers về trạng thái reset-defined
  -> CPU bắt đầu fetch instruction từ reset vector/reset entry
  -> Firmware early code chạy
  -> SEC tạo môi trường tối thiểu
  -> PEI/DXE/BDS tiếp tục flow
01 Reset

Reset signal

CPU và platform được đưa về trạng thái reset.

02 Fetch

Fetch first instruction

CPU đọc instruction từ reset vector/reset entry.

03 Early

Early assembly

Code rất sớm thiết lập CPU/temporary environment.

04 SEC

Enter SEC

SEC tạo stack tạm, tìm PEI Core hoặc firmware volume.

05 PEI

Enter PEI

PEI bắt đầu silicon init và memory init.

Sau reset, CPU đi từ reset vector tới SEC rồi PEI.

Vì sao CPU có thể chạy code khi DRAM chưa sẵn sàng?

Đây là điểm người mới học BIOS rất dễ thắc mắc.

Sau reset, DRAM thường chưa được training/init đầy đủ. Nhưng CPU vẫn có thể fetch instruction từ firmware flash/ROM mapping. Code đầu tiên phải chạy trong điều kiện rất hạn chế, sau đó dùng các kỹ thuật như temporary stack, cache-as-RAM hoặc SRAM nội bộ, tùy platform, để tạo môi trường chạy tạm trước khi DRAM sẵn sàng.

Tài nguyên ở thời điểm reset vector
Tài nguyên Trạng thái thường gặp Ý nghĩa
CPU core Được reset và bắt đầu fetch Có thể chạy instruction đầu tiên
Firmware flash/ROM Được map vào vùng CPU fetch được Chứa reset vector/early code
DRAM Chưa init hoặc chưa tin cậy Không dùng như RAM thường ngay lập tức
Cache Có thể dùng cho temporary memory tùy platform Cache-as-RAM trong SEC/PEI
Stack Chưa có stack bình thường Early code phải thiết lập
Serial Chưa chắc init Không có log ngay
PCI/USB/storage Chưa enumerate Không có disk/filesystem
UEFI services Chưa tồn tại Không gọi Boot Services được

Reset vector và firmware flash mapping

Để CPU fetch được instruction đầu tiên, firmware image phải được đặt và map đúng trong không gian địa chỉ mà CPU thấy sau reset.

Trong nhiều platform PC, firmware được lưu trong SPI flash. Chipset/SoC mapping logic làm cho vùng flash xuất hiện tại địa chỉ mà CPU reset fetch. Sau đó early code có thể nhảy vào firmware volume thật.

Flash mapping liên quan reset vector
Thành phần Vai trò Bug nếu sai
SPI flash Lưu firmware image Không fetch được code đúng
Flash descriptor/map Mô tả vùng flash/platform CPU đọc sai region
Reset vector bytes Instruction đầu tiên hoặc jump stub Reset loop
Firmware volume layout Chứa SEC/PEI/DXE modules Không tìm thấy PEI Core
Top/bottom mapping Platform mapping flash vào address space Entry point sai
Boot block Vùng code early quan trọng Brick nếu corrupt
Recovery block Fallback nếu main firmware hỏng Recovery không vào
Signature/measurement Security early nếu có Security fail sớm

Reset vector không phải UEFI phase

Reset vector không phải một phase UEFI như PEI/DXE/BDS. Nó là điểm bắt đầu thực thi, sau đó platform mới chuyển dần vào SEC và PEI.

Reset vector khác gì SEC/PEI?
Khái niệm Vai trò Ghi chú
Reset vector Địa chỉ/entry đầu tiên CPU fetch Trước cả SEC logic đầy đủ
SEC Tạo môi trường tối thiểu Temporary memory, stack, locate PEI
PEI Khởi tạo silicon/memory và HOB PEIM/PPI/HOB
DXE Driver/services/protocol Boot Services và Handle Database
BDS Chọn boot device BootOrder/Boot####/LoadImage
OS Loader Chuẩn bị OS GetMemoryMap/ExitBootServices
Runtime OS đã nhận quyền Runtime Services còn lại

Code ở reset vector thường làm gì?

Code ngay tại reset vector thường là assembly hoặc rất gần assembly. Nó không làm nhiều việc phức tạp. Nhiệm vụ chính là chuyển từ “CPU vừa reset” sang “có thể chạy SEC/PEI”.

Công việc thường gặp của early reset code

Reset Vector / Early Code
├─ Basic CPU setup
│  ├─ mode/state setup
│  └─ disable/enable feature tối thiểu
├─ Temporary execution setup
│  ├─ temporary stack
│  └─ cache-as-RAM hoặc temporary memory
├─ Firmware discovery
│  ├─ locate SEC/PEI entry
│  └─ verify firmware volume nếu có
├─ Early debug
│  ├─ POST code checkpoint
│  └─ very early serial/GPIO nếu support
└─ Handoff
├─ jump to SEC/PEI Core
└─ pass minimal context
Reset vector code nên và không nên làm
Nên làm Không nên làm Lý do
Thiết lập tối thiểu Gọi logic phức tạp Memory/log chưa sẵn
POST checkpoint Print log dài Serial có thể chưa init
Jump tới SEC Parse nhiều cấu trúc lớn Stack/heap hạn chế
Validate entry cơ bản Dùng UEFI Boot Services Boot Services chưa tồn tại
Dùng assembly cẩn thận Assume C runtime đầy đủ Global/stack có thể chưa OK
Fail safe/recovery nếu có Reset loop không log Khó debug field issue

Reset vector và SEC handoff

Mục tiêu thực tế của reset vector là đưa control tới SEC. SEC tiếp tục thiết lập môi trường tối thiểu rồi chuyển PEI.

01 Vector

Reset vector

CPU fetch instruction đầu tiên.

02 Stub

Early jump/stub

Code nhỏ thiết lập rất tối thiểu.

03 SEC

SEC entry

SEC tạo temporary execution environment.

04 PEI

PEI Core

SEC locate và chuyển sang PEI Core.

05 DRAM

Memory init

PEI init DRAM và chuẩn bị DXE.

Reset vector thường chỉ là cửa vào SEC.

Nếu reset vector jump sai, SEC không bao giờ chạy. Nếu SEC setup temporary memory sai, PEI có thể không chạy hoặc crash rất sớm.

Reset vector và Boot Guard / verified boot early

Trên một số platform, quá trình early boot có thể liên quan tới cơ chế verify/measure firmware trước hoặc trong khi early code chạy. Tùy platform, nếu firmware image không hợp lệ, boot có thể dừng rất sớm.

Security early boot liên quan reset vector
Cơ chế Mục tiêu Triệu chứng khi fail
Firmware authentication Đảm bảo code early không bị sửa Không vào SEC/PEI
Measured boot Đo firmware vào trust chain Measurement mismatch
Boot Guard/verified boot tùy platform Chặn firmware không hợp lệ Reset/shutdown/brick tùy policy
Recovery policy Chuyển sang recovery nếu main fail Recovery boot
Flash descriptor/security Bảo vệ region quan trọng Flash/update bị chặn
Anti-rollback Chặn firmware version thấp Update/boot fail
Debug unlock policy Cho phép debug early JTAG/trace bị khóa
Manufacturing mode Cho phép provisioning Production block operation

Debug signal ở reset vector

Ở giai đoạn này, debug signal rất hạn chế.

Debug signal cho reset vector
Signal Dùng để làm gì Hạn chế
POST code Biết code tới checkpoint nào Cần hardware/port/GPIO support
Early serial Log text rất sớm Serial init có thể chưa có
JTAG/TRACE Trace instruction/CPU state Có thể bị khóa
SPI analyzer Xem CPU/chipset đọc flash không Cần thiết bị ngoài
Oscilloscope Power/reset/clock signal Không thấy software state
Reset reason register Biết watchdog/power/cold/warm reset Cần đọc được sau boot/recovery
LED/GPIO blink Checkpoint đơn giản Rất thô
Recovery behavior Có vào recovery không Policy dependent

POST code trong early boot

POST code là cách firmware ghi checkpoint ra port, GPIO, I/O hoặc debug register để người debug biết code đã đi tới đâu.

Ví dụ mental model:

0x10: reset vector reached
0x11: early CPU setup done
0x12: temporary stack ready
0x13: SEC entry reached
0x20: PEI Core entered
0x30: memory init start
0x31: memory init done
POST code nên đặt ở đâu?
Checkpoint Ý nghĩa Nếu không thấy
Reset vector reached CPU fetch được firmware Flash mapping/reset issue
Early setup done CPU setup đầu tiên OK Early assembly fault
Temporary stack ready Có thể gọi code sâu hơn Stack/cache-as-RAM issue
SEC entry Reset vector jump đúng Jump/entry issue
PEI Core entry SEC handoff OK SEC locate PEI fail
Memory init start PEI dispatch tới memory PEIM PEI dispatch/FV issue
Memory init done DRAM ready Memory training issue nếu thiếu
DXE IPL PEI chuẩn bị chuyển DXE HOB/FV/DXE IPL issue

Early serial: tốt nhưng đừng quá tin

Early serial rất hữu ích, nhưng serial output ở reset/SEC/early PEI có nhiều giới hạn:

  • UART base address có thể chưa config
  • Clock chưa setup đúng
  • GPIO mux chưa đúng
  • MMIO access chưa stable
  • Serial init có thể phụ thuộc silicon init
  • Log quá dài có thể làm timing thay đổi
  • Print function có thể cần stack/buffer

Checklist early serial không có log

Reset vector bug thường gặp

Bug thường gặp quanh reset vector
Bug Triệu chứng Hướng debug
Flash image layout sai Không boot, không log Kiểm tra reset vector bytes/FV layout
Reset vector jump sai Chết trước SEC Disassemble early code
Boot block corrupt Brick hoặc recovery SPI dump/compare image
Temporary stack sai Crash sớm POST checkpoint stack ready
Cache-as-RAM setup sai PEI không vào hoặc random crash Early memory debug
CPU mode setup sai Reset loop/triple fault Trace CPU state
Wrong build target Image không phù hợp platform Check image map/config
Flash descriptor/map sai CPU fetch sai region SPI/descriptor check
Security verification fail Reset/shutdown rất sớm Boot Guard/verified boot logs nếu có
Watchdog reset Loop theo thời gian cố định Reset reason/watchdog

Reset loop: debug thế nào?

Reset loop sớm là một triệu chứng khó chịu. Hệ thống cứ reset trước khi vào log đầy đủ.

01 Power

Check power/clock/reset

Đảm bảo platform không reset vì nguồn/clock.

02 Fetch

Check CPU fetch

SPI/trace xem CPU có đọc flash không.

03 POST

Add checkpoints

Biết code reset ở checkpoint nào.

04 Reason

Read reset reason

Watchdog, warm reset, platform reset cause.

05 Early

Trace early code

Kiểm tra stack, jump, CPU setup.

06 Fix

Fix image/early init

Sửa layout, entry, temporary memory hoặc watchdog.

Debug reset loop sớm nên đi từ hardware signal tới firmware checkpoint.

Checklist reset loop rất sớm

Reset vector và firmware image layout

Firmware image cần có layout đúng để CPU entry và các firmware volume được tìm thấy.

Firmware image layout nhìn đơn giản

Firmware Image
├─ Boot Block / Reset Vector area
│  ├─ Reset stub
│  └─ SEC entry / jump target
├─ PEI Firmware Volume
│  ├─ PEI Core
│  ├─ Memory PEIM
│  └─ Silicon PEIMs
├─ DXE Firmware Volume
│  ├─ DXE Core
│  ├─ DXE drivers
│  └─ BDS modules
├─ Variable Store region
│  └─ NVRAM variables
├─ Microcode / ACM / platform blobs
│  └─ Tùy platform
└─ Recovery / capsule / other regions
└─ Tùy thiết kế firmware
Image layout sai gây lỗi gì?
Lỗi layout Triệu chứng Debug
Reset vector không trỏ đúng Không vào firmware Disassemble reset area
SEC entry sai offset Không vào SEC Map file/build report
PEI FV thiếu SEC không tìm PEI FV dump
DXE FV không expose DXE driver thiếu HOB/FV HOB
Variable store overlap NVRAM corrupt Flash map
Recovery region sai Không recovery được Recovery test
SKU image sai Early policy/security fail Board ID/SKU check
Alignment/padding sai Parser/FV fail FV header/checksum

Reset vector trong source tree nên tìm gì?

Trong EDK II hoặc firmware project thực tế, reset vector/SEC code có thể nằm trong package kiến trúc/platform. Tên file phụ thuộc project, nhưng khi đọc source, hãy tìm các nhóm:

Đọc source reset vector nên tìm gì?
Cần tìm Từ khóa/nhóm file Câu hỏi
Reset entry ResetVector, ResetVector.nasmb, ResetVec CPU bắt đầu ở đâu?
SEC entry SecCore, SecMain Reset vector nhảy tới đâu?
Temporary memory CacheAsRam, CAR, TempRam Stack tạm tạo thế nào?
PEI handoff PeiCore entry, SecStartup SEC truyền gì sang PEI?
Firmware volume base FV base/top, flash map SEC tìm PEI FV bằng cách nào?
POST/debug PostCode, SerialPortLib Checkpoint sớm ra sao?
Build map FDF, FD, FV, flash layout Reset area nằm đúng offset không?
Security early BootGuard, VerifiedBoot, ACM Có policy verify trước PEI không?

Debug Diary: Không có bất kỳ log nào

Triệu chứng:

Power on
Fan quay
Không serial log
Không vào BIOS Setup
Không POST screen

Đừng nhảy ngay tới DXE/BDS. Hãy đi từ reset vector.

Checklist không có bất kỳ log nào

Debug Diary: Có POST đầu nhưng không vào PEI

Triệu chứng:

POST 0x10 visible
POST 0x11 visible
Không thấy POST 0x20 PEI entry

Điều này nói CPU đã fetch reset vector và early code chạy được một phần. Root cause có thể nằm ở handoff SEC/PEI.

Checklist có early POST nhưng không vào PEI

Debug Diary: Build image mới làm brick board

Bạn chỉ thay đổi firmware image layout hoặc build config, flash vào board, board không boot.

Khả năng:

  • FDF layout thay đổi reset vector/boot block
  • PEI FV offset thay đổi nhưng SEC vẫn tìm offset cũ
  • Firmware volume alignment sai
  • Board dùng image sai SKU
  • Security manifest/signature không update
  • Variable store/region overlap
  • Recovery region bị ghi đè

Checklist image mới làm brick board

Debug Diary: Serial log không có nhưng POST code chạy

Điều này thường nghĩa là code chạy, nhưng serial init hoặc output path sai.

Checklist POST chạy nhưng serial không có

Anti-pattern khi debug reset vector

Anti-pattern khi debug reset vector
Anti-pattern Vì sao sai Cách sửa
Chờ DXE log khi chết ở reset DXE chưa chạy Dùng POST/trace/SPI
Thêm printf quá sớm Serial/stack chưa sẵn Dùng POST code trước
Assume DRAM dùng được Memory chưa init Dùng temporary memory đúng cách
Sửa DXE driver khi không vào PEI Sai phase Trace phase boundary
Không kiểm tra image layout Reset vector/FV có thể sai Check FDF/FD/FV map
Không kiểm tra reset reason Có thể watchdog/power reset Read reset cause
Flash image sai board Security/SKU/layout mismatch Verify board ID/SKU
Log quá nhiều early Thay đổi timing và stack usage Log tối giản/checkpoint

Instrumentation nên có ở reset vector

Instrumentation cho reset vector/early boot
Instrumentation Nên đặt ở đâu Mục tiêu
POST 0x10 Ngay khi reset vector reached Biết CPU fetch được firmware
POST 0x11 Sau early CPU setup Biết setup đầu tiên OK
POST 0x12 Sau temporary stack Biết có thể gọi code sâu hơn
POST 0x13 Trước SEC entry Biết jump target chuẩn bị gọi
POST 0x20 PEI Core entry Biết SEC handoff OK
Early serial minimal Sau UART init Log reset reason/base info
Reset reason dump Khi có thể đọc register Phân biệt watchdog/power reset
Build map marker Build artifact/log So image layout với source

Reset vector debug playbook

Reset vector debug playbook

Security checklist cho reset vector

Security checklist quanh reset vector

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

Source reading checklist cho reset vector
Cần hiểu Nơi tìm Câu hỏi
Reset entry ResetVector files Instruction đầu tiên là gì?
Jump target Early assembly Nhảy tới SEC ở đâu?
Temporary memory CacheAsRam/TempRam code Stack tạm setup ra sao?
SEC to PEI SecCore/SecMain PEI Core được locate thế nào?
Flash layout FDF/FD/FV map Reset vector và PEI FV ở offset nào?
POST code PostCodeLib/platform debug Checkpoint nào có sẵn?
Serial early SerialPortLib instance UART init lúc nào?
Security early Verified boot/Boot Guard/platform auth Có check nào trước PEI không?
Recovery Recovery PEI/boot block Nếu main fail thì đi đâu?
Build artifact map/report/log Image build có đúng layout mong muốn không?

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

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

Blog seeds

  • Reset Vector là gì? CPU bắt đầu chạy BIOS từ đâu?
  • Vì sao firmware chết trước DXE không có log?
  • POST code trong early boot cứu debug như thế nào?
  • Flash layout sai có thể brick board ra sao?
  • Reset vector, SEC và PEI khác nhau 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.