Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
UEFIをつくる
Search
Akira Moroo
March 24, 2018
Technology
1.2k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
UEFIをつくる
第11回 自作OSもくもく会でお話した内容です.
Akira Moroo
March 24, 2018
More Decks by Akira Moroo
See All by Akira Moroo
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
600
Exploring x86 MSR Space
retrage
0
1.6k
LLMでバイナリ解析支援
retrage
0
270
GitHub ActionsでDevSecOpsごっこ
retrage
0
120
Practical Rust (Hypervisor) Firmware
retrage
3
1.9k
Bypassing UEFI Secure Boot with Thin-Hypervisor
retrage
0
1.3k
Porting Linux to Nabla Containers
retrage
0
1.3k
Network Boot from Bell Labs
retrage
2
1.8k
Unikernelで始める自作OS/OS Development with Unikernel
retrage
1
720
Other Decks in Technology
See All in Technology
カンファレンスに参加した後の浮遊感とセルフケア
pauli
0
270
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
16
120k
覗いてみよう 関数型ビジュアル言語×2Dグラフィックスの世界
yohyamasaki
0
160
AIエージェント時代のPlatform as a Product —— テックリードがPdMとして回す発見・導入・計測 / Platform as a Product in the AI Agent Era
toshi0607
1
550
Swap and Memory Reclaim - Squeezing Out More RAM
ennael
PRO
1
1.5k
Codex概要
ymiya55
0
140
GitHub Agentic Workflows を触ってみる
htkym
2
910
【Findyテック文化祭ワークショップ】新卒エンジニア&採用担当と作る、 なりたい姿と今やるべき一歩
dip_tech
PRO
0
150
DORA_Metrics.pdf
wagnerfusca
1
140
雪かき部 #7 もう怖くない!SELECT文!
foursue
0
270
HolmesGPTで始めるSREエージェント入門!プラットフォームの障害調査はAIにお任せ 〜
leveragestech
PRO
0
130
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
130
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Paper Plane (Part 1)
katiecoart
PRO
2
11k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
380
A Tale of Four Properties
chriscoyier
163
24k
Believing is Seeing
oripsolob
1
230
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
390
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
530
30 Presentation Tips
portentint
PRO
1
410
Scaling GitHub
holman
464
140k
Transcript
UEFIをつくる 2018/03/24 第11回 自作OSもくもく会 @retrage
Recap: UEFI • Unified Extensible Firmware Interface • 標準化されたBIOSの規格とその実装 •
そもそもの始まりはIA-64向けにIntelが開発したEFI • EFIをベースにUEFI Forumにより標準化⇒UEFI • TianoCore: オープンソースなリファレンス実装 1
yabits • OSの起動にのみ特化したyet anotherなUEFI実装 • いろいろ動く • GRUB2 • Linux
kernel • OpenBSD • TianoCoreと比較して • 起動時間: 1/2 • フットプリント: 1/10 • 概要はMitou Demo Day 2017の動画にて • https://youtu.be/OIdPUK9a7vI 2
UEFI再考 • UEFIはOSではない.インターフェースである. • No multitask • No multithread •
No Ring Protection • 従来のLegacy BIOS同様,bootloaderやOSに対して 機能を提供することが目的 • UEFIのゴールはOSを起動すること 3
Boot Process 4 PEI DXE BDS TSL RT Hardware Init
Driver Driver Driver Driver Services Boot Manager Boot Loader OS
Handoff • Boot ManagerがESPを探索し,EFI Appを起動 • デフォルトでは\EFI\BOOT\BOOT<arch>.EFI • 起動時にスタックorレジスタに情報が渡される •
EFI_SYSTEM_TABLE * • EFI_HANDLE • IA-32の場合 5
EFI_SYSTEM_TABLE • UEFIの提供するServicesをまとめたstruct 6 typedef struct { EFI_TABLE_HEADER Hdr; CHAR16
*FirmwareVendor; UINT32 FirmwareRevision; EFI_HANDLE ConsoleInHandle; EFI_SIMPLE_TEXT_INPUT_PROTOCOL *ConIn; EFI_HANDLE ConsoleOutHandle; EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut; EFI_HANDLE StandardErrorHandle; EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *StdErr; EFI_RUNTIME_SERVICES *RuntimeServices; EFI_BOOT_SERVICES *BootServices; UINTN NumberOfTableEntries; EFI_CONFIGURATION_TABLE *ConfigurationTable; } EFI_SYSTEM_TABLE;
OSの起動に必要な機能 • BootServices • RuntimeServices • GPT+ESP対応 • デバイスドライバ •
最低限以上の機能があればOSの起動は可能 7
BootServices • ExitBootServices()されるまで提供するServices • 35個ほどあるが全て必要というわけでもない • メモリ関連 • {Allocate, Free}Pages(),
{Allocate, Free}Pool() など • Image関連 • LoadImage(), StartImage() • 他にもEventやProtocol関係のServiceがある • Servicesには依存関係が存在 • 例: LoadImage()の内部でAllocatePages()を呼び出す 8
ExitBootServices() • BootServices()のうちの1つ • 機能: BootServicesの提供を終了 • OSの条件: ExitBootServices()を呼ぶこと •
EFI AppではExit()によりUEFIに処理を戻す • が,実際にはExitBootServices()後もBootServicesが 利用できる • Linuxでは少なくともそうなっている • arch/x86/kernel/setup.c:1149 参照 9
RuntimeServices • OS起動後もUEFIが提供するServices • ExitBootServices()が呼ばれても存続 • NVRAM関連 • GetNextVariableName(), {Get,
Set}Variable() • 時間関連 • {Get, Set}Time(), {Get, Set}WakeupTime() • UEFI対応したOSではこれらを利用しているはず 10
SetVirtualAddressMap() • RuntimeServices()の1つ • UEFIのアドレッシングモードをPhysicalからVirtualへ • ExitBootServices()後に1度だけ呼び出される • UEFIはこれによりRuntimeServicesをリロケーション •
デバッグの非常に難しいところ 11
GUID Partition Table: GPT • MBR代替のPartition Tableの標準規格 • MBRを前提としたBIOSが読んでもPartition Tableが
壊れないようにLBA 0にProtective MBRが存在 12
EFI System Partition: ESP • 実質FATファイルシステム • 持っているGUIDが異なる • ライセンスとしてはMicrosoftがESPの利用に限って
認めているような状況(だったはず) • Linuxの場合: /boot • GRUB2などのbootloaderもここに置かれる • Boot ManagerはESPを探索,bootloader/OSを起動 • デフォルトでは\EFI\BOOT\BOOT<arch>.EFI • NVRAMのVariableにも依存 13
デバイスドライバ • 当然UEFIでも各種デバイスにアクセスする必要が あるのでデバイスドライバが必須 • 例: • PCIe, USB, IDE,
AHCIなど • UEFIでは基本的にはポーリング • yabitsではLibpayloadやFILO,depthchargeのドライ バを活用 14
OS開発者から見たUEFI • UNIX系をベースとしている場合非常に面倒 • Calling Conventionの違いなど • Linuxでの対応方法 • GRUB2による起動
• EFI Appなヘッダを作成してOSをEFI Appとして起動 • OpenBSDやBitVisorでの対応方法 • EFI対応の1st loader+共通の2nd loader • UEFI対応についてLinuxと同じ方針をとったnon GPL なtoy OSがあると幸せかもしれない 15
まとめ • UEFIは標準化されたBIOSの規格とその実装 • UEFIはbootloaderやOSに対するインターフェース • UEFIはBootServices, RuntimeServicesなどの機能を 提供 •
OS開発者から見た場合,UEFIは利用できる機能は Legacy BIOSと比較して増えたものの,その分煩雑 になったとも言える 16
参考文献 • http://www.uefi.org/sites/default/files/resources/ UEFI%20Spec%202_7_A%20Sept%206.pdf • http://wiki.phoenix.com/wiki/index.php/EFI_BOOT _SERVICES • http://wiki.phoenix.com/wiki/index.php/EFI_RUNTI ME_SERVICES
• https://github.com/yabits/uefi 17