MMRAM là gì?
Giải thích MMRAM trong PI/UEFI: quan hệ với SMRAM, descriptor base/size/state, lock timing và checklist debug SMM memory.
MMRAM, Management Mode RAM, là thuật ngữ trong PI/UEFI dùng để mô tả vùng memory dành cho Management Mode. Nếu SMRAM là cách gọi quen thuộc trên x86 SMM, thì MMRAM là cách nhìn tổng quát hơn: firmware cần biết vùng nào được bảo vệ, base/size ra sao, đang open/closed/locked, và SMM Core được phép dùng vùng nào.
Nói ngắn gọn: MMRAM là cách firmware mô tả và quản lý vùng memory bảo vệ mà SMM sẽ chạy bên trong.
Protected memory range
Platform cung cấp vùng memory có thể bảo vệ khỏi OS và non-SMM code.
MMRAM descriptor
Firmware mô tả base, size và state của vùng đó bằng descriptor.
SMM Core uses it
SMM Core, dispatcher, handler và data nội bộ chạy trong vùng được bảo vệ.
Runtime protection
Trước khi OS chạy, vùng này phải được close/lock đúng policy.
SMRAM và MMRAM khác nhau thế nào?
| Mục | Giá trị | Ghi chú |
|---|---|---|
| SMRAM | Thuật ngữ quen thuộc trên x86 | Nhấn mạnh vùng RAM dành cho System Management Mode. |
| MMRAM | Thuật ngữ trong PI/UEFI | Tổng quát hơn, dùng cho Management Mode memory descriptor và state. |
| Bản chất | Cùng nói về protected management memory | Khi học debug, có thể xem MMRAM là cách firmware mô tả/quản lý vùng SMRAM-like. |
| Khi đọc source | Tên gọi phụ thuộc module/spec | EDK II và PI spec có thể dùng MMRAM trong interface, trong khi tài liệu x86 hay nói SMRAM. |
MMRAM descriptor cho biết gì?
MMRAM không chỉ là một vùng address. Firmware cần descriptor để các module biết vùng đó bắt đầu ở đâu, dài bao nhiêu, và trạng thái hiện tại có cho phép access không.
| Mục | Giá trị | Ghi chú |
|---|---|---|
| PhysicalStart | Base address | Vị trí bắt đầu vùng MMRAM/SMRAM trong physical address space. |
| PhysicalSize | Size | Kích thước vùng được bảo vệ. Sai size có thể làm SMM Core load thiếu hoặc overlap memory khác. |
| RegionState | Open/Closed/Locked | Trạng thái quyết định non-SMM code có còn access được không. |
| CpuStart | CPU view | Một số kiến trúc/platform có mapping CPU-specific, không phải lúc nào cũng bằng PhysicalStart. |
State transition cần hiểu
Find protected range
Platform tìm hoặc reserve vùng memory dành cho Management Mode.
Publish descriptor
Descriptor mô tả base, size và state cho SMM infrastructure.
Load SMM code
SMM Core và driver dùng vùng này khi còn ở giai đoạn setup.
Close MMRAM
Non-SMM code không còn access được như memory bình thường.
Lock policy
Vùng này không nên mở lại tùy tiện sau khi platform chuyển sang runtime.
Một bug khó chịu là descriptor đúng ở build cũ nhưng sai ở build mới do thay đổi memory map, FDF, platform config hoặc memory init. Khi đó SMM driver có thể load được một phần, nhưng access data lại fail hoặc system reset ngay khi handler chạy.
Debug Diary: SMM driver load nhưng access data fail
Nếu SMM driver đã load nhưng truy cập một buffer hoặc data structure bị lỗi, đừng chỉ nghi C code của handler. Hãy kiểm tra liệu pointer đó có thuộc đúng vùng hay không.
- Data nội bộ SMM nên nằm trong MMRAM/SMRAM.
- Communication buffer từ DXE/OS phải nằm ngoài MMRAM/SMRAM.
- Nested pointer bên trong CommBuffer cũng phải được validate, không chỉ validate buffer ngoài cùng.
- Descriptor base/size sai có thể làm vùng tưởng là safe thực ra overlap vùng khác.
Failure pattern hay gặp
| Mục | Giá trị | Ghi chú |
|---|---|---|
| Base/size sai | Descriptor không khớp memory map | SMM Core hoặc handler có thể access nhầm vùng, gây exception hoặc reset. |
| RegionState sai | Open/Closed/Locked không đúng thời điểm | Open quá lâu là security risk, lock quá sớm có thể làm driver register fail. |
| Overlap memory | MMRAM đè lên vùng khác | Có thể gây corruption rất khó trace, nhất là sau thay đổi memory init hoặc FDF. |
| CommBuffer overlap | Input buffer chạm MMRAM | Handler phải từ chối, thường trả security violation nếu validate đúng. |
| CpuStart khác PhysicalStart | Mapping assumption sai | Không nên assume mọi platform dùng cùng CPU view và physical view. |
Checklist debug MMRAM
MMRAM checklist
Câu hỏi tự kiểm tra
Tự kiểm tra sau khi đọc note này
Bài liên quan
- SMM Architecture Overview
- SMRAM là gì?
- SW SMI là gì?
- SMM Handler là gì?
- SMM Communication là gì?
- SmmReadyToLock 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.
SMM Architecture Overview
Tổng quan SMM: SMI trigger, Save State, SMRAM/MMRAM, SMM Core, handler, SmmReadyToLock và checklist debug khi OS đã chạy.
SMRAM là gì?
Giải thích SMRAM như vùng memory bảo vệ cho SMM: layout, open/closed/locked state, Save State và checklist debug protection.
SW SMI là gì?
Giải thích SW SMI: OUT 0xB2, command ID, SMM dispatch, handler registration, failure pattern và checklist debug bảo mật.
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.