Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Takuya ASADA
25,245 views
UEFI時代のブートローダ
UEFI boot loaders
Technology
◦
Read more
36
Save
Share
Embed
Embed presentation
Download
Downloaded 94 times
1
/ 38
2
/ 38
3
/ 38
4
/ 38
5
/ 38
6
/ 38
7
/ 38
8
/ 38
9
/ 38
10
/ 38
11
/ 38
12
/ 38
Most read
13
/ 38
14
/ 38
15
/ 38
16
/ 38
17
/ 38
18
/ 38
19
/ 38
20
/ 38
Most read
21
/ 38
22
/ 38
23
/ 38
24
/ 38
25
/ 38
26
/ 38
27
/ 38
28
/ 38
29
/ 38
30
/ 38
31
/ 38
32
/ 38
33
/ 38
34
/ 38
Most read
35
/ 38
36
/ 38
37
/ 38
38
/ 38
More Related Content
PPTX
UEFIによるELFバイナリの起動
by
uchan_nos
PDF
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
by
NTT Communications Technology Development
PDF
VirtualBox と Rocky Linux 8 で始める Pacemaker ~ VirtualBox でも STONITH 機能が試せる! Vi...
by
ksk_ha
PDF
20111015 勉強会 (PCIe / SR-IOV)
by
Kentaro Ebisawa
PDF
YoctoでLTSディストリを作るには
by
wata2ki
PPTX
大規模分散システムの現在 -- Twitter
by
maruyama097
PPTX
Linuxのsemaphoreとmutexを見る
by
wata2ki
PPTX
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
by
toshi_pp
UEFIによるELFバイナリの起動
by
uchan_nos
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
by
NTT Communications Technology Development
VirtualBox と Rocky Linux 8 で始める Pacemaker ~ VirtualBox でも STONITH 機能が試せる! Vi...
by
ksk_ha
20111015 勉強会 (PCIe / SR-IOV)
by
Kentaro Ebisawa
YoctoでLTSディストリを作るには
by
wata2ki
大規模分散システムの現在 -- Twitter
by
maruyama097
Linuxのsemaphoreとmutexを見る
by
wata2ki
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
by
toshi_pp
What's hot
PPTX
本当は恐ろしい分散システムの話
by
Kumazaki Hiroki
PDF
FPGA+SoC+Linux実践勉強会資料
by
一路 川染
PDF
仮想化環境におけるパケットフォワーディング
by
Takuya ASADA
PDF
ゼロからはじめるKVM超入門
by
VirtualTech Japan Inc.
PDF
レシピの作り方入門
by
Nobuhiro Iwamatsu
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
by
Fixstars Corporation
PDF
Interrupt Affinityについて
by
Takuya ASADA
PDF
5分で分かるgitのrefspec
by
ikdysfm
PDF
ARM Trusted FirmwareのBL31を単体で使う!
by
Mr. Vengineer
PDF
Lxc で始めるケチケチ仮想化生活?!
by
Etsuji Nakai
PDF
Ethernetの受信処理
by
Takuya ASADA
PDF
パケットキャプチャの勘どころ Ssmjp 201501
by
稔 小林
PDF
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
by
Mr. Vengineer
PDF
Dockerイメージ管理の内部構造
by
Etsuji Nakai
PDF
Raspberry pi で始める v sphere 7 超入門
by
Satoshi Imai
PDF
4章 Linuxカーネル - 割り込み・例外 2
by
mao999
PDF
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
by
Masahito Zembutsu
PDF
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
by
i_yudai
PDF
Linux女子部 systemd徹底入門
by
Etsuji Nakai
PDF
10分で分かるLinuxブロックレイヤ
by
Takashi Hoshino
本当は恐ろしい分散システムの話
by
Kumazaki Hiroki
FPGA+SoC+Linux実践勉強会資料
by
一路 川染
仮想化環境におけるパケットフォワーディング
by
Takuya ASADA
ゼロからはじめるKVM超入門
by
VirtualTech Japan Inc.
レシピの作り方入門
by
Nobuhiro Iwamatsu
ARM CPUにおけるSIMDを用いた高速計算入門
by
Fixstars Corporation
Interrupt Affinityについて
by
Takuya ASADA
5分で分かるgitのrefspec
by
ikdysfm
ARM Trusted FirmwareのBL31を単体で使う!
by
Mr. Vengineer
Lxc で始めるケチケチ仮想化生活?!
by
Etsuji Nakai
Ethernetの受信処理
by
Takuya ASADA
パケットキャプチャの勘どころ Ssmjp 201501
by
稔 小林
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
by
Mr. Vengineer
Dockerイメージ管理の内部構造
by
Etsuji Nakai
Raspberry pi で始める v sphere 7 超入門
by
Satoshi Imai
4章 Linuxカーネル - 割り込み・例外 2
by
mao999
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
by
Masahito Zembutsu
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
by
i_yudai
Linux女子部 systemd徹底入門
by
Etsuji Nakai
10分で分かるLinuxブロックレイヤ
by
Takashi Hoshino
Similar to UEFI時代のブートローダ
PDF
Play with UEFI
by
Takuya ASADA
PDF
UEFIで始めるLinux From Scratch
by
Yuma Ohgami
PPTX
BIOSからUEFI
by
Yasuaki Sera
PPTX
2015年度の自宅NAS環境
by
Hiroaki Mizuguchi
PDF
UEFIのブート方式について
by
Tamaki Amano
PDF
UEFI向け自作OSの紹介
by
Yuma Ohgami
PDF
NetBSD/evbarm (APC9750) への道
by
tokudahiroshi
PDF
initramfsについて
by
Kazuhiro Nishiyama
PDF
Infinite Debian - Platform for mass-producing system every second
by
Taisuke Yamada
Play with UEFI
by
Takuya ASADA
UEFIで始めるLinux From Scratch
by
Yuma Ohgami
BIOSからUEFI
by
Yasuaki Sera
2015年度の自宅NAS環境
by
Hiroaki Mizuguchi
UEFIのブート方式について
by
Tamaki Amano
UEFI向け自作OSの紹介
by
Yuma Ohgami
NetBSD/evbarm (APC9750) への道
by
tokudahiroshi
initramfsについて
by
Kazuhiro Nishiyama
Infinite Debian - Platform for mass-producing system every second
by
Taisuke Yamada
More from Takuya ASADA
PPTX
Seastar in 歌舞伎座.tech#8「C++初心者会」
by
Takuya ASADA
PPTX
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
by
Takuya ASADA
PDF
高スループットなサーバアプリケーションの為の新しいフレームワーク 「Seastar」
by
Takuya ASADA
PDF
ヤマノススメ〜秋山郷 de ハッカソン〜
by
Takuya ASADA
PDF
OSvのご紹介 in Java 8 HotSpot meeting
by
Takuya ASADA
PDF
OSvパンフレット v3
by
Takuya ASADA
PDF
OSvのご紹介 in OSC2014 Tokyo/Fall
by
Takuya ASADA
PDF
OSv噺
by
Takuya ASADA
PDF
OSvの概要と実装
by
Takuya ASADA
PDF
Linux network stack
by
Takuya ASADA
PDF
Presentation on your terminal
by
Takuya ASADA
PDF
僕のIntel nucが起動しないわけがない
by
Takuya ASADA
PDF
OSvパンフレット
by
Takuya ASADA
PDF
BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
by
Takuya ASADA
PDF
「ハイパーバイザの作り方」読書会#2
by
Takuya ASADA
PDF
「ハイパーバイザの作り方」読書会#1
by
Takuya ASADA
PDF
10GbE時代のネットワークI/O高速化
by
Takuya ASADA
PDF
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
by
Takuya ASADA
PDF
仮想化環境での利用者公平性
by
Takuya ASADA
PDF
マルチコアとネットワークスタックの高速化技法
by
Takuya ASADA
Seastar in 歌舞伎座.tech#8「C++初心者会」
by
Takuya ASADA
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
by
Takuya ASADA
高スループットなサーバアプリケーションの為の新しいフレームワーク 「Seastar」
by
Takuya ASADA
ヤマノススメ〜秋山郷 de ハッカソン〜
by
Takuya ASADA
OSvのご紹介 in Java 8 HotSpot meeting
by
Takuya ASADA
OSvパンフレット v3
by
Takuya ASADA
OSvのご紹介 in OSC2014 Tokyo/Fall
by
Takuya ASADA
OSv噺
by
Takuya ASADA
OSvの概要と実装
by
Takuya ASADA
Linux network stack
by
Takuya ASADA
Presentation on your terminal
by
Takuya ASADA
僕のIntel nucが起動しないわけがない
by
Takuya ASADA
OSvパンフレット
by
Takuya ASADA
BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
by
Takuya ASADA
「ハイパーバイザの作り方」読書会#2
by
Takuya ASADA
「ハイパーバイザの作り方」読書会#1
by
Takuya ASADA
10GbE時代のネットワークI/O高速化
by
Takuya ASADA
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
by
Takuya ASADA
仮想化環境での利用者公平性
by
Takuya ASADA
マルチコアとネットワークスタックの高速化技法
by
Takuya ASADA
Recently uploaded
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):東京大学情報基盤センター テーマ1/2/3「Society5.0の実現を目指す『計算・データ・学習...
by
PC Cluster Consortium
PDF
安価な ロジック・アナライザを アナライズ(?),Analyze report of some cheap logic analyzers
by
たけおか しょうぞう
PDF
第25回FA設備技術勉強会_自宅で勉強するROS・フィジカルAIアイテム.pdf
by
TomohiroKusu
PDF
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
by
NTT DATA Technology & Innovation
PPTX
DrupalCon Nara 2025の記録 .
by
iPride Co., Ltd.
PDF
visionOS TC「新しいマイホームで過ごすApple Vision Proとの新生活」
by
Sugiyama Yugo
PCCC25(設立25年記念PCクラスタシンポジウム):東京大学情報基盤センター テーマ1/2/3「Society5.0の実現を目指す『計算・データ・学習...
by
PC Cluster Consortium
安価な ロジック・アナライザを アナライズ(?),Analyze report of some cheap logic analyzers
by
たけおか しょうぞう
第25回FA設備技術勉強会_自宅で勉強するROS・フィジカルAIアイテム.pdf
by
TomohiroKusu
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
by
NTT DATA Technology & Innovation
DrupalCon Nara 2025の記録 .
by
iPride Co., Ltd.
visionOS TC「新しいマイホームで過ごすApple Vision Proとの新生活」
by
Sugiyama Yugo
UEFI時代のブートローダ
1.
UEFI時代のブート ローダ @syuu1228
2.
自己紹介 • Software
Engineer at Cloudius Systems (OSv) • FreeBSD developer (bhyve, network stack..)
3.
UEFIのおさらい
4.
BIOSブート ←ディスクに1個 •
MBRからブートセクタをロード • プログラム領域が足りないのでMBRの次のセク タなどを利用して更に大きなブートローダをロー ド(多段ブート) • /bootファイルシステムをパースしてLinuxカー ネルを見つけてロード&実行
5.
UEFIブート • ブートセクタなどなかった
• EFIパーティーション(FATファイルシステム)にブートロー ダ(UEFIイメージ)を配置 • NVRAMに設定がある →設定されたパスからブートローダをロード&実行 • NVRAMに設定がない →デフォルトパスからブートローダをロード&実行 • プロテクテッドモード、UEFI API ←ディスクにn個(いくらでも)
6.
BIOSのブートイメージ • ブートセクタなどのとても狭い領域に固定的に配
置 • リアルモード • アドレッシング出来るメモリに大きな制約 • アセンブリ • 古くさいBIOSコールによる限られたAPI
7.
UEFIイメージ • PEバイナリ
(Windowsアプリと似たようなヘッダ) • 32/64bitプロテクテッドモード (※但し両対応ファームはない) • サイズ制限、メモリ容量制限なし • 全てC言語で記述可能 • 豊富なAPI
8.
参考:Runtime Services •
ExitBootServices()後もUEFIがOSに対して提供するサービ ス • 最低限の機能のみ • Time (GetTime, SetTime...) • Virtual Memory (SetirtualAddressMap...) • Variable Services (GetVariable...) • Miscellaneous Services(ResetSystem...)
9.
参考:Boot Services •
ExitBootServices()までUEFI Applicationに提供するサービス • Task Priority Services (RaiseTPL...) • Memory Services (AllocatePages...) • Event & Timer Services (CreateEvent, SetTimer...) • Protocol Handler Services (HandleProtocol...) • Image Services (LoadImage, StartImage...) • Miscellaneous Services (Stall, CopyMem...) • Open and Close Protocol Services (OpenProtocol...) • Library Services (LocateProtocol...) • 32bit CRC Services (CalculateCrc32...)
10.
参考:Procotols • ネットワークプロトコルスタックのことではな
い • UEFI上で提供される様々なサービスの事 • UEFI Driverを実装しUEFIへロードする事によ り、自作のProtocolを提供する事も可能
11.
参考:定義されている Protocol •
EFI Loaded Image • Device Path Protocol • UEFI Driver Model • Console Support • Media Access • PCI Bus Support • SCSI Driver Models and Bus Support • iSCSI Boot • USB Support • Debugger Support • Compression Algorithm • ACPI Protocols • TCP/IP, IPSec, FTP • ARP & DHCP • UDP & MTFTP • etc...
12.
UEFIからのブート手順 (デフォルト) BootManagerの設定がデフォルト値の場合
1. UEFIがHDDを検出、GPTをロード 2. EFI System Partitionを検索 3. EFIBOOTBOOTX64.EFIをロード (32bit UEFIならBOOTX86.EFI)
13.
UEFIからのブート手順 (カスタム) 以下の様な値をUEFI
NVRAM variableに設定(efibootmgrなど) • Boot####:ロードするUEFI applicationのPATH・ 又はディスクのデバイスPATH • BootOrder:Boot####の試行順序(配列で指定) • BootNext:次回起動時にロードするBoot#### (BootOrderより優先、一度起動すると削除) • Timeout:設定秒数だけBoot Menuを表示(自動起動を遅 延)
14.
設定例 • efibootmgrで編集
• /sys/firmware/efi/vars, /sys/firmware/efi/efivars 経由でUEFI NVRAM Variableへアクセス
15.
/sys/firmware/efi/efivars syuu@ubuntu:~$ ls
/sys/firmware/efi/efivars Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c Boot0001-8be4df61-93ca-11d2-aa0d-00e098032b8c Boot0002-8be4df61-93ca-11d2-aa0d-00e098032b8c Boot0003-8be4df61-93ca-11d2-aa0d-00e098032b8c Boot0004-8be4df61-93ca-11d2-aa0d-00e098032b8c BootCurrent-8be4df61-93ca-11d2-aa0d-00e098032b8c ... $ sudo cat /sys/firmware/efi/efivars/ Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c @EFI VMware Virtual SCSI Hard Drive (0.0) ?
16.
Boot Manager ブート項目の選択画面。
OSは自分のブートローダをここに登録する
17.
UEFI Shell •
運が良ければROMに乗ってる 無ければUSBからロード
18.
さまざまな UEFIブート手順
19.
UEFIでのLinuxブート方法(1) • shim→grub2→Linux
bzImage • shim→grub2→Linux EFI Stub • grub2→Linux bzImage • grub2→Linux EFI Stub • gummiboot→Linux EFI Stub • Linux EFI Stub ←SecureBoot
20.
UEFIでのLinuxブート方法(2) • LinuxカーネルにEFI
Stubを用意すれば直接Boot Managerからロード出来る • UEFIイメージから更に別のUEFIイメージをロー ド&実行できる • UEFI APIがサポートしていないバイナリフォー マットよりもサポートが容易 サポートすることによるデメリットも少ない
21.
なるほど~?
22.
非対応フォーマットの ロード&実行 •
ヘッダのパース • メモリへの展開 • CPUレジスタの初期化、辻褄合わせ • エントリポイントへのジャンプ _人人人人人人_ > 結構面倒 < ‾Y^Y^Y^Y^Y‾
23.
UEFIイメージのロード& 実行 •
UEFIイメージファイルをロードするAPI にファイル名渡して終わりでは? _人人人人人人_ > 簡単そう < ‾Y^Y^Y^Y^Y‾
24.
ところで • mrubyはUEFIで動く(mruby
on EFI shell)
25.
ということは • mrubyにローダAPIを足せばmrubyスクリ
プトでブートローダを簡単に実装出来 るのでは?
26.
UEFI APIサポートon mruby
class BlockIoProtocol < UEFI::Protocol GUID = UEFI::Guid.new("964e5b21-6459-11d2-8e39-00a0c969723b") define_variable(:revision, :u64) define_variable(:media, :p) define_function(:reset, :e, [:p, :b]) define_function(:read_blocks, :e, [:p, :u32, :u64, :u64, :p]) end class Media < UEFI::Protocol define_variable(:media_id, :uint32) end handles = UEFI::BootService.locate_handle_buffer(BlockIoProtocol::GUID) handle = handles.first puts "handle: #{handle}" ptr = UEFI::BootService.handle_protocol(handle, BlockIoProtocol::GUID) bp = BlockIoProtocol.new(ptr) media = Media.new(bp.media) puts "media_id: #{media.media_id}"
27.
これを使ってmrubyでロー ダを書けばいいんじゃね?
28.
Cで書く→mrubyに起こす • Cで書いてみた
https://gist.github.com/syuu1228/ d7ce6b949cbeec887ea0
29.
どのAPIをmrubyでどう置き 換えれば良いのか分からない …(゜Д゜)
30.
方針転換 • 足りない機能は皆C拡張にしてしまえ
• さっきのコードをコピペしてmrubyのクラス化 →実行 • 何故かエラー… • (゜Д゜)
31.
む?
32.
良くみたらsystem(3) あったわ •
EDK2にはlibc + BSD socketのテスト実装が載ってる (非公式あつかい) • どうせmrubyは初めからこれをリンクしている • system(3)もある • 文字列組み立てて渡せば一行のCコードでバイナリ実行 できんじゃん… • 何を苦労していたんだろう
33.
が… • mruby
on EFI shellはmrubyの標準ビルドシス テムを迂回してEDKのビルドシステムでビルド されてる • mrubyのビルドシステムを使わないとmrbgems を追加出来ない • 殆どAPIが無い&簡単に足せない…
34.
応急処置的に足す • さっきのsystem(3)を呼び出すShell.exec()
• キーボード入力を受け付けるShell.gets() • Dirクラス
35.
完成! • https://github.com/syuu1228/
mruby_on_efi_shell/blob/ 862b7d95e399dc23744c589220e59d6e6f 0adff3/example/bootloader.rb
36.
デモ
37.
TODO • mrbgems問題をどうにかするべき
• HTTPクライアントをポーティングしてカーネルもスク リプトも外から落としてきて実行させたい • ファイルシステムドライバをインストールしてext[2-4] の/bootからカーネルをロードしたい • ブートしたらツイートしたい • もうちょっと整備すると結構便利になると思う
38.
URL • https://github.com/syuu1228/
mruby_on_efi_shell/tree/devel
Download