SMM Driver là gì?

Giải thích SMM driver: module load vào SMM, register handler, khác DXE driver và debug lỗi dispatch muộn.

Cập nhật 5 phút đọc
Đọc bằng Tiếng Việt English 日本語
Security / SMM / Memory / Firmware Image Terms cover

SMM Driver là driver được load vào môi trường SMM hoặc Management Mode. Nó thường đăng ký SMI handler, cung cấp service nội bộ cho SMM, hoặc bảo vệ các thao tác nhạy cảm như variable update và SPI flash access.

Điểm khác biệt lớn: DXE driver chạy trong môi trường DXE bình thường. SMM driver phải sống trong vùng memory bảo vệ, dùng SMM services phù hợp, và có thể tiếp tục phục vụ một số request sau khi OS đã chạy.

SMM driver khác DXE driver ở đâu?

Mục Giá trị Ghi chú
Execution environment SMRAM/MMRAM Code và data nhạy cảm của SMM driver nằm trong vùng memory được bảo vệ.
Service table SMM services Không nên dùng Boot Services như DXE driver, đặc biệt sau ExitBootServices.
Main job Register handler Driver thường register SW SMI, communication handler, protocol hoặc policy callback.
Timing Trước lock Handler/policy nhạy cảm cần register trước SmmReadyToLock.
Debug style Khó quan sát OS không thấy stack trace nếu driver gây exception trong SMM.

SMM driver đi vào firmware như thế nào?

EDK II mental model

MyPkg/
├─ MyDxeDriver/
│  └─ MyDxeDriver.inf        # chạy ở DXE
└─ MySmmDriver/
   ├─ MySmmDriver.inf        # MODULE_TYPE = DXE_SMM_DRIVER
   └─ MySmmHandler.c         # register SMI handler
01 INF

Khai báo module

INF cần đúng MODULE_TYPE, packages, libraries và protocol dependency.

02 DSC

Đưa vào build

Module phải được liệt kê trong DSC để build ra binary.

03 FDF

Đưa vào FV

Build pass nhưng không nằm trong firmware volume được flash thì runtime không bao giờ chạy.

04 Dispatch

SMM Core load

SMM Core dispatch driver khi dependency thỏa mãn.

05 Register

Register handler

Driver đăng ký handler hoặc protocol trước khi policy bị lock.

Build pass chưa đủ. SMM driver phải đi qua DSC, FDF, FV, dispatch và registration trước khi handler thật sự chạy.

Failure pattern hay gặp

Mục Giá trị Ghi chú
Build pass nhưng không chạy Thiếu FDF/FV Driver có build nhưng image đang flash không chứa module đó.
Không có log entrypoint Dispatch chưa xảy ra Kiểm tra DEPEX, dependency protocol và FV placement.
Register fail Quá muộn hoặc protocol thiếu Có thể đã qua SmmReadyToLock hoặc dispatch protocol chưa available.
Handler không nhận SMI SMI source sai Command ID, source enable hoặc registration context không khớp.
Treo/reset khi handler chạy SMM exception Thường do pointer sai, gọi service không hợp lệ hoặc stack/pool không phù hợp.

Debug Diary: SMM driver build pass nhưng handler không chạy

Đây là lỗi rất dễ gặp. Developer sửa C code, build pass, flash image mới, trigger SW SMI nhưng không thấy log handler. Nếu chỉ nhìn code handler, sẽ dễ debug sai hướng.

Tôi thường đi theo chuỗi này:

01 INF

MODULE_TYPE đúng chưa?

SMM driver cần khai báo đúng module type và library class phù hợp.

02 DSC

Có được build không?

Kiểm tra binary có sinh ra trong build output không.

03 FDF

Có nằm trong FV không?

Module phải nằm trong firmware volume thật sự được flash.

04 DEPEX

Có bị dispatch muộn không?

Dependency sai có thể làm driver không chạy trước lock.

05 Register

Register status là gì?

Log status của Register thay vì chỉ log sau khi handler chạy.

SMM driver không chạy thường phải debug từ packaging tới dispatch, không bắt đầu từ body của handler.

Nếu không thấy log entrypoint, chưa cần sửa handler. Nếu entrypoint chạy nhưng register fail, kiểm tra lock timing và protocol. Nếu register success nhưng handler không chạy, kiểm tra SMI source và trigger path.

Checklist debug SMM driver

SMM driver không chạy

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

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

Blog seeds

  • SMM Driver Debug: vì sao build pass nhưng handler không bao giờ chạy?
  • INF, DSC, FDF, FV: đường đi của một SMM driver vào firmware image
  • Late Dispatch Bug: SMM driver chạy sau SmmReadyToLock thì chuyện gì xảy ra?

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.