EfiBootServicesDataとは?
BIOS/UEFIおよびembedded firmware学習者向けにEfiBootServicesDataを説明するクイックノート。
EfiBootServicesDataは、memory map、runtime mapping、OS handoff周辺で使われるUEFI memory managementの概念である。
なぜ重要か
- firmwareからOSへ制御が移るときのmemory ownershipを説明する。
- ExitBootServices()、runtime mapping、memory type問題のdebugに役立つ。
- UEFI memory mapを読むときに役立つ。
実例
例:GetMemoryMap()後にmemory mapが変わるとExitBootServices()が失敗する。その場合、新しいmemory mapを取得し直し、新しいkeyを使う。
クイックチェックリスト
覚えておくポイント
EfiBootServicesDataは、firmwareからOSへ制御を渡すときのmemory ownershipに関係する。
デバッグ時の見方
EfiBootServicesData は、単独の用語として暗記するよりも、firmware の流れの中に置くと理解しやすいです。誰が作り、誰が読み、値が間違ったときにどの症状として出るのかを意識すると、学習用のメモがそのまま debug のチェックポイントになります。
小さな具体例
firmware の memory bug は、原因の場所と症状が出る場所が離れていることがあります。EfiBootServicesData では、ownership、lifetime、memory type、そして ExitBootServices() 前に OS へ一貫した memory map が渡っているかを確認します。
実際のデバッグで見るポイント
EfiBootServicesData は単独の用語ではなく、boot chain の一部として見ると理解しやすいです。つまり Boot Manager が NVRAM を読む → Boot option を選ぶ → Device Path を parse する → .efi file を開く → loader に制御を渡す という流れです。意図しない device から boot する場合、boot loader そのものよりも、そこへ到達するための metadata が原因になることがあります。
実務では、boot variable を dump し、その値がどの option を指しているか、その option が active か、内部の device path が現在の disk/partition 構成と一致しているかを確認します。
関連ノート
- SetVirtualAddressMapとは?
- Memory Map Keyとは?
- EfiRuntimeServicesDataとは?
- EFI_MEMORY_TYPEとは?
- ConvertPointerとは?
公開参考資料
- UEFI Specification 2.11 - Boot Manager
- UEFI Specification 2.11 - Boot Services / Memory
- UEFI Specification 2.11 - Runtime Services
- EDK II MdePkg UefiSpec.h
この記事は役に立ちましたか?
ファームウェア、BIOS/UEFI、組み込みシステムを学んでいる人に共有できます。
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.