Enviar pesquisa
Carregar
UEFI時代のブートローダ
•
36 gostaram
•
25,073 visualizações
Takuya ASADA
Seguir
UEFI boot loaders
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 38
Baixar agora
Baixar para ler offline
Recomendados
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
wata2ki
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみた
Hiraku Toyooka
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
NTT Communications Technology Development
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -
zgock
initramfsについて
initramfsについて
Kazuhiro Nishiyama
NEDIA_SNIA_CXL_講演資料.pdf
NEDIA_SNIA_CXL_講演資料.pdf
Yasunori Goto
Recomendados
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
wata2ki
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみた
Hiraku Toyooka
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
NTT Communications Technology Development
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -
zgock
initramfsについて
initramfsについて
Kazuhiro Nishiyama
NEDIA_SNIA_CXL_講演資料.pdf
NEDIA_SNIA_CXL_講演資料.pdf
Yasunori Goto
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)
Kentaro Ebisawa
I/O仮想化最前線〜ネットワークI/Oを中心に〜
I/O仮想化最前線〜ネットワークI/Oを中心に〜
Ryousei Takano
トラブルから理解するHyper vの基礎
トラブルから理解するHyper vの基礎
Naoki Abe
OSvの概要と実装
OSvの概要と実装
Takuya ASADA
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2
uchan_nos
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
Masahito Zembutsu
OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27
Kentaro Ebisawa
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
Raspberry Piで始める自宅サーバー超入門
Raspberry Piで始める自宅サーバー超入門
VirtualTech Japan Inc./Begi.net Inc.
OSC2011 Tokyo/Fall 濃いバナ(virtio)
OSC2011 Tokyo/Fall 濃いバナ(virtio)
Takeshi HASEGAWA
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
30分で分かる!OSの作り方
30分で分かる!OSの作り方
uchan_nos
自宅サーバ仮想化
自宅サーバ仮想化
anubis_369
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
Motonori Shindo
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces
Akihiro Suda
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
i_yudai
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
Taisuke Yamada
BHyVeってなんや
BHyVeってなんや
Takuya ASADA
Mais conteúdo relacionado
Mais procurados
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)
Kentaro Ebisawa
I/O仮想化最前線〜ネットワークI/Oを中心に〜
I/O仮想化最前線〜ネットワークI/Oを中心に〜
Ryousei Takano
トラブルから理解するHyper vの基礎
トラブルから理解するHyper vの基礎
Naoki Abe
OSvの概要と実装
OSvの概要と実装
Takuya ASADA
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2
uchan_nos
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
Masahito Zembutsu
OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27
Kentaro Ebisawa
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
Raspberry Piで始める自宅サーバー超入門
Raspberry Piで始める自宅サーバー超入門
VirtualTech Japan Inc./Begi.net Inc.
OSC2011 Tokyo/Fall 濃いバナ(virtio)
OSC2011 Tokyo/Fall 濃いバナ(virtio)
Takeshi HASEGAWA
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
30分で分かる!OSの作り方
30分で分かる!OSの作り方
uchan_nos
自宅サーバ仮想化
自宅サーバ仮想化
anubis_369
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
Motonori Shindo
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces
Akihiro Suda
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
i_yudai
Mais procurados
(20)
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)
I/O仮想化最前線〜ネットワークI/Oを中心に〜
I/O仮想化最前線〜ネットワークI/Oを中心に〜
トラブルから理解するHyper vの基礎
トラブルから理解するHyper vの基礎
OSvの概要と実装
OSvの概要と実装
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27
Docker Compose 徹底解説
Docker Compose 徹底解説
Raspberry Piで始める自宅サーバー超入門
Raspberry Piで始める自宅サーバー超入門
OSC2011 Tokyo/Fall 濃いバナ(virtio)
OSC2011 Tokyo/Fall 濃いバナ(virtio)
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
30分で分かる!OSの作り方
30分で分かる!OSの作り方
自宅サーバ仮想化
自宅サーバ仮想化
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
Semelhante a UEFI時代のブートローダ
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
Taisuke Yamada
BHyVeってなんや
BHyVeってなんや
Takuya ASADA
Bhyve code reading
Bhyve code reading
Takuya ASADA
2015年度の自宅NAS環境
2015年度の自宅NAS環境
Hiroaki Mizuguchi
Open VZ
Open VZ
Kazuaki Fujikura
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
Kotaro Noyama
Lxc cf201207-presen
Lxc cf201207-presen
Kouhei Maeda
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
Kotaro Noyama
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
Satoshi Yazawa
統合監視ソフトウェア Zabbix新バージョン2.0の紹介
統合監視ソフトウェア Zabbix新バージョン2.0の紹介
takanori suzuki
Bhyve Internals
Bhyve Internals
Takuya ASADA
Hadoop on LXC
Hadoop on LXC
俊夫 森
Raspberry pi で始める v sphere 7 超入門
Raspberry pi で始める v sphere 7 超入門
Satoshi Imai
SubversionServer設置
SubversionServer設置
Kuniaki Igarashi
Yocto Project ハンズオン / 参加者用資料
Yocto Project ハンズオン / 参加者用資料
Nobuhiro Iwamatsu
A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0
Satoshi Kume
microPCFを使ってみよう
microPCFを使ってみよう
Hiroaki_UKAJI
OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門
VirtualTech Japan Inc.
20110715 osc2011 kyoto
20110715 osc2011 kyoto
Yamauchi isamu
あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。
Masahito Zembutsu
Semelhante a UEFI時代のブートローダ
(20)
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
BHyVeってなんや
BHyVeってなんや
Bhyve code reading
Bhyve code reading
2015年度の自宅NAS環境
2015年度の自宅NAS環境
Open VZ
Open VZ
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
Lxc cf201207-presen
Lxc cf201207-presen
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
統合監視ソフトウェア Zabbix新バージョン2.0の紹介
統合監視ソフトウェア Zabbix新バージョン2.0の紹介
Bhyve Internals
Bhyve Internals
Hadoop on LXC
Hadoop on LXC
Raspberry pi で始める v sphere 7 超入門
Raspberry pi で始める v sphere 7 超入門
SubversionServer設置
SubversionServer設置
Yocto Project ハンズオン / 参加者用資料
Yocto Project ハンズオン / 参加者用資料
A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0
microPCFを使ってみよう
microPCFを使ってみよう
OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門
20110715 osc2011 kyoto
20110715 osc2011 kyoto
あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。
Mais de Takuya ASADA
Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」
Takuya ASADA
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Takuya ASADA
高スループットなサーバアプリケーションの為の新しいフレームワーク 「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク 「Seastar」
Takuya ASADA
ヤマノススメ〜秋山郷 de ハッカソン〜
ヤマノススメ〜秋山郷 de ハッカソン〜
Takuya ASADA
OSvのご紹介 in Java 8 HotSpot meeting
OSvのご紹介 in Java 8 HotSpot meeting
Takuya ASADA
OSvパンフレット v3
OSvパンフレット v3
Takuya ASADA
OSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/Fall
Takuya ASADA
OSv噺
OSv噺
Takuya ASADA
Linux network stack
Linux network stack
Takuya ASADA
Ethernetの受信処理
Ethernetの受信処理
Takuya ASADA
Presentation on your terminal
Presentation on your terminal
Takuya ASADA
僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない
Takuya ASADA
Interrupt Affinityについて
Interrupt Affinityについて
Takuya ASADA
OSvパンフレット
OSvパンフレット
Takuya ASADA
BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
Takuya ASADA
「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2
Takuya ASADA
「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1
Takuya ASADA
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
Takuya ASADA
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
Takuya ASADA
仮想化環境での利用者公平性
仮想化環境での利用者公平性
Takuya ASADA
Mais de Takuya ASADA
(20)
Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
高スループットなサーバアプリケーションの為の新しいフレームワーク 「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク 「Seastar」
ヤマノススメ〜秋山郷 de ハッカソン〜
ヤマノススメ〜秋山郷 de ハッカソン〜
OSvのご紹介 in Java 8 HotSpot meeting
OSvのご紹介 in Java 8 HotSpot meeting
OSvパンフレット v3
OSvパンフレット v3
OSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/Fall
OSv噺
OSv噺
Linux network stack
Linux network stack
Ethernetの受信処理
Ethernetの受信処理
Presentation on your terminal
Presentation on your terminal
僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない
Interrupt Affinityについて
Interrupt Affinityについて
OSvパンフレット
OSvパンフレット
BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい 〜BIOSがなくてもこの先生きのこるには〜
「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
仮想化環境での利用者公平性
仮想化環境での利用者公平性
Último
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
Último
(9)
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
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
Baixar agora