Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
わんくま同盟 札幌勉強会 #1 2017-03
UEFIベアメタルプログラミング
大神 祐真
yuma@ohgami.jp
わんくま同盟 札幌勉強会 #1 2017-03
自己紹介
• 大神 祐真 (おおがみ ゆうま)
– http://yuma.ohgami.jp
• 職業
– 組み込み系の技術営業@東京
(2016/12から)
• 趣味
– フルスクラッチでOS...
わんくま同盟 札幌勉強会 #1 2017-03
自己紹介
• 大神 祐真 (おおがみ ゆうま)
– http://yuma.ohgami.jp
• 職業
– 組み込み系の技術営業@東京
(2016/12から)
• 趣味
– フルスクラッチでOS...
わんくま同盟 札幌勉強会 #1 2017-03
自己紹介
• 大神 祐真 (おおがみ ゆうま)
– http://yuma.ohgami.jp
• 職業
– 組み込み系の技術営業@東京
(2016/12から)
• 趣味
– フルスクラッチでOS...
わんくま同盟 札幌勉強会 #1 2017-03
自己紹介
• 大神 祐真 (おおがみ ゆうま)
– http://yuma.ohgami.jp
• 組み込み系のエンジニア
– Linux
– C言語、アセンブラ(ARM)
• 趣味
– フルスク...
わんくま同盟 札幌勉強会 #1 2017-03
自己紹介
• 大神 祐真 (おおがみ ゆうま)
– http://yuma.ohgami.jp
• 組み込み系のエンジニア
– Linux
– C言語、アセンブラ(ARM)
• 趣味
– フルスク...
わんくま同盟 札幌勉強会 #1 2017-03
自己紹介
• 大神 祐真 (おおがみ ゆうま)
– http://yuma.ohgami.jp
• 組み込み系のエンジニア
– Linux
– C言語、アセンブラ(ARM)
• 趣味
– フルスク...
わんくま同盟 札幌勉強会 #1 2017-03
自己紹介
• 大神 祐真 (おおがみ ゆうま)
– http://yuma.ohgami.jp
• 組み込み系のエンジニア
– Linux
– C言語、アセンブラ(ARM)
• 趣味
– フルスク...
わんくま同盟 札幌勉強会 #1 2017-03
目次
• UEFIとは?、ベアメタルプログラミングとは?
<ベアメタルプログラミング>
• Hello world! (実行までの流れを把握)
• UEFIバージョン取得 (UEFIの情報取得)
...
わんくま同盟 札幌勉強会 #1 2017-03
UEFIとは?
Unified Extensible Firmware Interface
(統一された拡張性のあるファームウェアインタフェース)
Unified Extensible Firmw...
わんくま同盟 札幌勉強会 #1 2017-03
ベアメタルプログラミングとは?
• OSやライブラリ等を使用せず、
ハードウェアを制御するプログラミング
• OS5へ反映させるために、
まずは、UEFIでベアメタルプログラミング
• 今回紹介し...
わんくま同盟 札幌勉強会 #1 2017-03
目次
• UEFIとは?、ベアメタルプログラミングとは?
<ベアメタルプログラミング>
• Hello world! (実行までの流れを把握)
• UEFIバージョン取得 (UEFIの情報取得)
...
わんくま同盟 札幌勉強会 #1 2017-03
実行までの流れ
1. ソースコード作成(C言語)
2. コンパイル(PE32+)
3. 2.を、ストレージ(USBフラッシュメモリ等)の
第1パーティション(FAT)の
EFI/BOOT/BOOT...
わんくま同盟 札幌勉強会 #1 2017-03
1. ソースコード作成(C言語)
UEFI Specification を用意
【私の環境の場合】
• QEMU(OVMF.fd) : v2.4
• 実機(Lenovo ThinkPad) : v...
わんくま同盟 札幌勉強会 #1 2017-03
1. ソースコード作成(C言語)
仕様書にはCのプロトタイプ宣言も書かれているので、
この記載に則った形でソースコードを作っていく
Unified Extensible Firmware Inte...
わんくま同盟 札幌勉強会 #1 2017-03
1. ソースコード作成(C言語)
【UEFIの機能を呼び出すには】
• UEFIアプリのエントリ関数の
プロトタイプ宣言が、仕様で決められている
Unified Extensible Firmwa...
わんくま同盟 札幌勉強会 #1 2017-03
【UEFIの機能を呼び出すには】
• UEFIアプリのエントリ関数の
プロトタイプ宣言が、仕様で決められている
Unified Extensible Firmware Interface Spec...
わんくま同盟 札幌勉強会 #1 2017-03
【UEFIの機能を呼び出すには】
EFI_SYSTEM_TABLEの宣言(一部)
Unified Extensible Firmware Interface Specification Versi...
わんくま同盟 札幌勉強会 #1 2017-03
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOLの宣言
Unified Extensible Firmware Interface Specification Version 2.3...
わんくま同盟 札幌勉強会 #1 2017-03
EFI_TEXT_STRINGの宣言
Unified Extensible Firmware Interface Specification Version 2.3.1 (P.428)
http:...
わんくま同盟 札幌勉強会 #1 2017-03
EFI_TEXT_STRINGの宣言
Unified Extensible Firmware Interface Specification Version 2.3.1 (P.428)
http:...
わんくま同盟 札幌勉強会 #1 2017-03
“Hello UEFI!”を出力するサンプル
010_conout/BOOTX64.c
https://github.com/cupnes/bare_metal_uefi
1. ソースコード作成(...
わんくま同盟 札幌勉強会 #1 2017-03
“Hello UEFI!”を出力するサンプル
010_conout/BOOTX64.c
https://github.com/cupnes/bare_metal_uefi
1. ソースコード作成(...
わんくま同盟 札幌勉強会 #1 2017-03
2. コンパイル(PE32+)
1. PE32+のクロスコンパイラを用意
– apt: x86_64-w64-mingw32-gcc
2. コンパイル
$ x86_64-w64-mingw32-g...
わんくま同盟 札幌勉強会 #1 2017-03
3. ストレージへ配置、4. ストレージから起動
【実機】
1. ストレージの第1パーティション(FAT)の
EFI/BOOT/BOOTX64.EFI に配置
2. 1.のストレージから起動
# ...
わんくま同盟 札幌勉強会 #1 2017-03
3. EFI/BOOT/BOOTX64.EFI へ配置
【QEMU】
1. UEFIファームウェア(OVMF.fd)をダウンロード
– https://sourceforge.net/projec...
わんくま同盟 札幌勉強会 #1 2017-03
実機での実行の様子
わんくま同盟 札幌勉強会 #1 2017-03
キー入力を取得する
【UEFIの機能を呼び出すには】
EFI_SYSTEM_TABLEの宣言(一部)
Unified Extensible Firmware Interface Specifica...
わんくま同盟 札幌勉強会 #1 2017-03
キー入力を取得する
【UEFIの機能を呼び出すには】
EFI_SYSTEM_TABLEの宣言(一部)
Unified Extensible Firmware Interface Specifica...
わんくま同盟 札幌勉強会 #1 2017-03
目次
• UEFIとは?、ベアメタルプログラミングとは?
<ベアメタルプログラミング>
• Hello world! (実行までの流れを把握)
• UEFIバージョン取得 (UEFIの情報取得)
...
わんくま同盟 札幌勉強会 #1 2017-03
UEFIの情報取得
UEFIの情報も”SystemTable”から辿りつける
EFI_SYSTEM_TABLEの宣言(一部)
Unified Extensible Firmware Interfa...
わんくま同盟 札幌勉強会 #1 2017-03
UEFIの情報取得
EFI_TABLE_HEADERの定義
わんくま同盟 札幌勉強会 #1 2017-03
UEFIの情報取得
EFI_TABLE_HEADERの定義
Unified Extensible Firmware Interface Specification Version 2.3.1 (P...
わんくま同盟 札幌勉強会 #1 2017-03
UEFIの情報取得
UEFIバージョンを表示させてみる
【サンプルコード】
https://github.com/cupnes/bare_metal_uefi/tree/master/012_
e...
わんくま同盟 札幌勉強会 #1 2017-03
目次
• UEFIとは?、ベアメタルプログラミングとは?
<ベアメタルプログラミング>
• Hello world! (実行までの流れを把握)
• UEFIバージョン取得 (UEFIの情報取得)
...
わんくま同盟 札幌勉強会 #1 2017-03
プロトコルとGUID
• 全ての機能がSystemTableからメンバとして
辿れるわけではない
• UEFIでは機能ごとに”プロトコル”と呼んで分
けている
– 各プロトコルには一意の”GUID...
わんくま同盟 札幌勉強会 #1 2017-03
Unified Extensible Firmware Interface Specification Version 2.3.1 (P.466)
http://www.uefi.org/spec...
わんくま同盟 札幌勉強会 #1 2017-03
Unified Extensible Firmware Interface Specification Version 2.3.1 (P.184)
http://www.uefi.org/spec...
わんくま同盟 札幌勉強会 #1 2017-03
GUIDとLocateProtocol()
LocateProtocol()使用例
わんくま同盟 札幌勉強会 #1 2017-03
gop
画面描画を行ってくれる関数
Unified Extensible Firmware Interface Specification Version 2.3.1 (P.466)
http:/...
わんくま同盟 札幌勉強会 #1 2017-03
gop->Blt()
Unified Extensible Firmware Interface Specification Version 2.3.1 (P.474)
http://www.ue...
わんくま同盟 札幌勉強会 #1 2017-03
gop->Blt()
Unified Extensible Firmware Interface Specification Version 2.3.1 (P.474)
http://www.ue...
わんくま同盟 札幌勉強会 #1 2017-03
gop->Blt()
Unified Extensible Firmware Interface Specification Version 2.3.1 (P.474)
http://www.ue...
わんくま同盟 札幌勉強会 #1 2017-03
gop->Blt()
表示する
ピクセルデータ
B G R - B G R -
B G R -
・ ・ ・
・ ・ ・
・ ・ ・
各8ビット
32ビットで1ピクセル
Unified Extens...
わんくま同盟 札幌勉強会 #1 2017-03
gop->Blt()
Unified Extensible Firmware Interface Specification Version 2.3.1 (P.474)
http://www.ue...
わんくま同盟 札幌勉強会 #1 2017-03
gop->Blt()
Unified Extensible Firmware Interface Specification Version 2.3.1 (P.474)
http://www.ue...
わんくま同盟 札幌勉強会 #1 2017-03
実行の様子
わんくまの画像を表示してみる
【サンプルコード】
https://github.com/cupnes/bare_metal_uefi/tree/master/043_
graphic_...
わんくま同盟 札幌勉強会 #1 2017-03
【発表後追記】発表で行った、スライドに無かった内容について
• UEFIスライドショー
– 以下に置いてあります
使い方はREADMEを見てみてください
– https://github.com/...
Upcoming SlideShare
Loading in …5
×

UEFIベアメタルプログラミング

361 views

Published on

わんくま同盟 札幌勉強会 #1(2017-03-04)の発表スライドです。
なお、発表時に使用していたEFIプログラム版の発表スライドは
http://yuma.ohgami.jp に置いてあります。

Published in: Software
  • Be the first to comment

  • Be the first to like this

UEFIベアメタルプログラミング

  1. 1. わんくま同盟 札幌勉強会 #1 2017-03 UEFIベアメタルプログラミング 大神 祐真 yuma@ohgami.jp
  2. 2. わんくま同盟 札幌勉強会 #1 2017-03 自己紹介 • 大神 祐真 (おおがみ ゆうま) – http://yuma.ohgami.jp • 職業 – 組み込み系の技術営業@東京 (2016/12から) • 趣味 – フルスクラッチでOS自作
  3. 3. わんくま同盟 札幌勉強会 #1 2017-03 自己紹介 • 大神 祐真 (おおがみ ゆうま) – http://yuma.ohgami.jp • 職業 – 組み込み系の技術営業@東京 (2016/12から) • 趣味 – フルスクラッチでOS自作
  4. 4. わんくま同盟 札幌勉強会 #1 2017-03 自己紹介 • 大神 祐真 (おおがみ ゆうま) – http://yuma.ohgami.jp • 職業 – 組み込み系の技術営業@東京 (2016/12から) • 趣味 – フルスクラッチでOS自作 【技術書典2】 http://techbookfest.org え-15: へにゃぺんて “Ohgami’s Commentary on OS5”
  5. 5. わんくま同盟 札幌勉強会 #1 2017-03 自己紹介 • 大神 祐真 (おおがみ ゆうま) – http://yuma.ohgami.jp • 組み込み系のエンジニア – Linux – C言語、アセンブラ(ARM) • 趣味 – フルスクラッチでOS自作 • 名前: OS5 • アーキテクチャ: BIOS + x86_32 • 動作確認: QEMU • 作りこみ • ブートローダー: ○ • カーネル : ○ • ユーザーランド: △
  6. 6. わんくま同盟 札幌勉強会 #1 2017-03 自己紹介 • 大神 祐真 (おおがみ ゆうま) – http://yuma.ohgami.jp • 組み込み系のエンジニア – Linux – C言語、アセンブラ(ARM) • 趣味 – フルスクラッチでOS自作 • 名前: OS5 • アーキテクチャ: BIOS + x86_32 • 動作確認: QEMU • 作りこみ • ブートローダー: ○ • カーネル : ○ • ユーザーランド: △
  7. 7. わんくま同盟 札幌勉強会 #1 2017-03 自己紹介 • 大神 祐真 (おおがみ ゆうま) – http://yuma.ohgami.jp • 組み込み系のエンジニア – Linux – C言語、アセンブラ(ARM) • 趣味 – フルスクラッチでOS自作 • 名前: OS5 • アーキテクチャ: BIOS + x86_32 • 動作確認: QEMU • 作りこみ • ブートローダー: ○ • カーネル : ○ • ユーザーランド: △ 今どき、 UEFI + x86_64
  8. 8. わんくま同盟 札幌勉強会 #1 2017-03 自己紹介 • 大神 祐真 (おおがみ ゆうま) – http://yuma.ohgami.jp • 組み込み系のエンジニア – Linux – C言語、アセンブラ(ARM) • 趣味 – フルスクラッチでOS自作 • 名前: OS5 • アーキテクチャ: BIOS + x86_32 • 動作確認: QEMU • 作りこみ • ブートローダー: ○ • カーネル : ○ • ユーザーランド: △ 今どき、 UEFI + x86_64 まずは UEFIから 勉強してみよう
  9. 9. わんくま同盟 札幌勉強会 #1 2017-03 目次 • UEFIとは?、ベアメタルプログラミングとは? <ベアメタルプログラミング> • Hello world! (実行までの流れを把握) • UEFIバージョン取得 (UEFIの情報取得) • グラフィック表示 (GUIDを使ってみる)
  10. 10. わんくま同盟 札幌勉強会 #1 2017-03 UEFIとは? Unified Extensible Firmware Interface (統一された拡張性のあるファームウェアインタフェース) Unified Extensible Firmware Interface – Wikipedia https://ja.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface
  11. 11. わんくま同盟 札幌勉強会 #1 2017-03 ベアメタルプログラミングとは? • OSやライブラリ等を使用せず、 ハードウェアを制御するプログラミング • OS5へ反映させるために、 まずは、UEFIでベアメタルプログラミング • 今回紹介しきれないものも含め、 サンプルコードを以下で公開している – https://github.com/cupnes/bare_metal_uefi
  12. 12. わんくま同盟 札幌勉強会 #1 2017-03 目次 • UEFIとは?、ベアメタルプログラミングとは? <ベアメタルプログラミング> • Hello world! (実行までの流れを把握) • UEFIバージョン取得 (UEFIの情報取得) • グラフィック表示 (GUIDを使ってみる)
  13. 13. わんくま同盟 札幌勉強会 #1 2017-03 実行までの流れ 1. ソースコード作成(C言語) 2. コンパイル(PE32+) 3. 2.を、ストレージ(USBフラッシュメモリ等)の 第1パーティション(FAT)の EFI/BOOT/BOOTX64.EFI に配置 4. 3.で起動
  14. 14. わんくま同盟 札幌勉強会 #1 2017-03 1. ソースコード作成(C言語) UEFI Specification を用意 【私の環境の場合】 • QEMU(OVMF.fd) : v2.4 • 実機(Lenovo ThinkPad) : v2.3.1
  15. 15. わんくま同盟 札幌勉強会 #1 2017-03 1. ソースコード作成(C言語) 仕様書にはCのプロトタイプ宣言も書かれているので、 この記載に則った形でソースコードを作っていく Unified Extensible Firmware Interface Specification Version 2.3.1 (P.75) http://www.uefi.org/specifications
  16. 16. わんくま同盟 札幌勉強会 #1 2017-03 1. ソースコード作成(C言語) 【UEFIの機能を呼び出すには】 • UEFIアプリのエントリ関数の プロトタイプ宣言が、仕様で決められている Unified Extensible Firmware Interface Specification Version 2.3.1 (P.75) http://www.uefi.org/specifications
  17. 17. わんくま同盟 札幌勉強会 #1 2017-03 【UEFIの機能を呼び出すには】 • UEFIアプリのエントリ関数の プロトタイプ宣言が、仕様で決められている Unified Extensible Firmware Interface Specification Version 2.3.1 (P.75) http://www.uefi.org/specifications この構造体を通して UEFIの機能を呼び出せる 1. ソースコード作成(C言語)
  18. 18. わんくま同盟 札幌勉強会 #1 2017-03 【UEFIの機能を呼び出すには】 EFI_SYSTEM_TABLEの宣言(一部) Unified Extensible Firmware Interface Specification Version 2.3.1 (P.78) http://www.uefi.org/specifications 1. ソースコード作成(C言語)
  19. 19. わんくま同盟 札幌勉強会 #1 2017-03 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOLの宣言 Unified Extensible Firmware Interface Specification Version 2.3.1 (P.424) http://www.uefi.org/specifications コンソールへ文字列を出力する関数 1. ソースコード作成(C言語)
  20. 20. わんくま同盟 札幌勉強会 #1 2017-03 EFI_TEXT_STRINGの宣言 Unified Extensible Firmware Interface Specification Version 2.3.1 (P.428) http://www.uefi.org/specifications この関数(EFI_TEXT_STRING)をメンバとする構造体 (EFI_SIMPLE_OUTPUT_PROTOCOL)のポインタ 1. ソースコード作成(C言語)
  21. 21. わんくま同盟 札幌勉強会 #1 2017-03 EFI_TEXT_STRINGの宣言 Unified Extensible Firmware Interface Specification Version 2.3.1 (P.428) http://www.uefi.org/specifications 文字列(Unicode,2bytes)のポインタ 1. ソースコード作成(C言語)
  22. 22. わんくま同盟 札幌勉強会 #1 2017-03 “Hello UEFI!”を出力するサンプル 010_conout/BOOTX64.c https://github.com/cupnes/bare_metal_uefi 1. ソースコード作成(C言語)
  23. 23. わんくま同盟 札幌勉強会 #1 2017-03 “Hello UEFI!”を出力するサンプル 010_conout/BOOTX64.c https://github.com/cupnes/bare_metal_uefi 1. ソースコード作成(C言語)
  24. 24. わんくま同盟 札幌勉強会 #1 2017-03 2. コンパイル(PE32+) 1. PE32+のクロスコンパイラを用意 – apt: x86_64-w64-mingw32-gcc 2. コンパイル $ x86_64-w64-mingw32-gcc -e efi_main ¥ -nostdlib -Wl,--subsystem,10 ¥ -o BOOTX64.EFI hello.c
  25. 25. わんくま同盟 札幌勉強会 #1 2017-03 3. ストレージへ配置、4. ストレージから起動 【実機】 1. ストレージの第1パーティション(FAT)の EFI/BOOT/BOOTX64.EFI に配置 2. 1.のストレージから起動 # mount /dev/sdb1 /mnt # mkdir -p /mnt/EFI/BOOT # cp BOOTX64.EFI /mnt/EFI/BOOT/
  26. 26. わんくま同盟 札幌勉強会 #1 2017-03 3. EFI/BOOT/BOOTX64.EFI へ配置 【QEMU】 1. UEFIファームウェア(OVMF.fd)をダウンロード – https://sourceforge.net/projects/edk2/files/OVMF/ 2. QEMUにHDDと認識させるディレクトリ作成、 BOOTX64.EFI配置 3. QEMU起動 $ mkdir -p hdd/EFI/BOOT $ cp BOOTX64.EFI hdd/EFI/BOOT/ $ qemu-system-x86_64 -bios OVMF.fd -hda fat:hdd
  27. 27. わんくま同盟 札幌勉強会 #1 2017-03 実機での実行の様子
  28. 28. わんくま同盟 札幌勉強会 #1 2017-03 キー入力を取得する 【UEFIの機能を呼び出すには】 EFI_SYSTEM_TABLEの宣言(一部) Unified Extensible Firmware Interface Specification Version 2.3.1 (P.78) http://www.uefi.org/specifications
  29. 29. わんくま同盟 札幌勉強会 #1 2017-03 キー入力を取得する 【UEFIの機能を呼び出すには】 EFI_SYSTEM_TABLEの宣言(一部) Unified Extensible Firmware Interface Specification Version 2.3.1 (P.78) http://www.uefi.org/specifications キー入力を取得できそうな 機能がある
  30. 30. わんくま同盟 札幌勉強会 #1 2017-03 目次 • UEFIとは?、ベアメタルプログラミングとは? <ベアメタルプログラミング> • Hello world! (実行までの流れを把握) • UEFIバージョン取得 (UEFIの情報取得) • グラフィック表示 (GUIDを使ってみる)
  31. 31. わんくま同盟 札幌勉強会 #1 2017-03 UEFIの情報取得 UEFIの情報も”SystemTable”から辿りつける EFI_SYSTEM_TABLEの宣言(一部) Unified Extensible Firmware Interface Specification Version 2.3.1 (P.78) http://www.uefi.org/specifications
  32. 32. わんくま同盟 札幌勉強会 #1 2017-03 UEFIの情報取得 EFI_TABLE_HEADERの定義
  33. 33. わんくま同盟 札幌勉強会 #1 2017-03 UEFIの情報取得 EFI_TABLE_HEADERの定義 Unified Extensible Firmware Interface Specification Version 2.3.1 (P.77) http://www.uefi.org/specifications マイナーバージョンメジャーバージョン 上位16ビット 下位16ビット 例) 0x0002 0x0040 (2.4) 0x0002 0x0031 (2.3.1)
  34. 34. わんくま同盟 札幌勉強会 #1 2017-03 UEFIの情報取得 UEFIバージョンを表示させてみる 【サンプルコード】 https://github.com/cupnes/bare_metal_uefi/tree/master/012_ efiversion 【実行の様子】 QEMU 実機
  35. 35. わんくま同盟 札幌勉強会 #1 2017-03 目次 • UEFIとは?、ベアメタルプログラミングとは? <ベアメタルプログラミング> • Hello world! (実行までの流れを把握) • UEFIバージョン取得 (UEFIの情報取得) • グラフィック表示 (GUIDを使ってみる)
  36. 36. わんくま同盟 札幌勉強会 #1 2017-03 プロトコルとGUID • 全ての機能がSystemTableからメンバとして 辿れるわけではない • UEFIでは機能ごとに”プロトコル”と呼んで分 けている – 各プロトコルには一意の”GUID”が存在
  37. 37. わんくま同盟 札幌勉強会 #1 2017-03 Unified Extensible Firmware Interface Specification Version 2.3.1 (P.466) http://www.uefi.org/specifications プロトコルとGUID
  38. 38. わんくま同盟 札幌勉強会 #1 2017-03 Unified Extensible Firmware Interface Specification Version 2.3.1 (P.184) http://www.uefi.org/specifications プロトコルの構造体へのポインタが設定される LocateProtocol() SystemTable->BootServices->LocateProtocol() で GUIDからプロトコルの構造体の先頭アドレスを取得できる
  39. 39. わんくま同盟 札幌勉強会 #1 2017-03 GUIDとLocateProtocol() LocateProtocol()使用例
  40. 40. わんくま同盟 札幌勉強会 #1 2017-03 gop 画面描画を行ってくれる関数 Unified Extensible Firmware Interface Specification Version 2.3.1 (P.466) http://www.uefi.org/specifications
  41. 41. わんくま同盟 札幌勉強会 #1 2017-03 gop->Blt() Unified Extensible Firmware Interface Specification Version 2.3.1 (P.474) http://www.uefi.org/specifications
  42. 42. わんくま同盟 札幌勉強会 #1 2017-03 gop->Blt() Unified Extensible Firmware Interface Specification Version 2.3.1 (P.474) http://www.uefi.org/specifications
  43. 43. わんくま同盟 札幌勉強会 #1 2017-03 gop->Blt() Unified Extensible Firmware Interface Specification Version 2.3.1 (P.474) http://www.uefi.org/specifications ピクセルデータ を画面表示
  44. 44. わんくま同盟 札幌勉強会 #1 2017-03 gop->Blt() 表示する ピクセルデータ B G R - B G R - B G R - ・ ・ ・ ・ ・ ・ ・ ・ ・ 各8ビット 32ビットで1ピクセル Unified Extensible Firmware Interface Specification Version 2.3.1 (P.474) http://www.uefi.org/specifications
  45. 45. わんくま同盟 札幌勉強会 #1 2017-03 gop->Blt() Unified Extensible Firmware Interface Specification Version 2.3.1 (P.474) http://www.uefi.org/specifications 表示先座標 (原点は画面左上)
  46. 46. わんくま同盟 札幌勉強会 #1 2017-03 gop->Blt() Unified Extensible Firmware Interface Specification Version 2.3.1 (P.474) http://www.uefi.org/specifications ピクセルデータの 幅、高さ
  47. 47. わんくま同盟 札幌勉強会 #1 2017-03 実行の様子 わんくまの画像を表示してみる 【サンプルコード】 https://github.com/cupnes/bare_metal_uefi/tree/master/043_ graphic_image_blt 【実行の様子】
  48. 48. わんくま同盟 札幌勉強会 #1 2017-03 【発表後追記】発表で行った、スライドに無かった内容について • UEFIスライドショー – 以下に置いてあります 使い方はREADMEを見てみてください – https://github.com/cupnes/bare_metal_uefi/tree/master/050_slide show • UEFI Shell – TianoCore[*1]から配布されている以下のEFIバイナリを使用しました – https://github.com/tianocore/edk2/tree/master/EdkShellBinPkg/Ful lShell/X64 – このEFIバイナリも、前述の説明通り、 ストレージの第1パーティション(FAT)の EFI/BOOT/BOOTX64.EFI へ配置すれば、 UEFIのファームウェアが実行してくれます [*1] ベアメタルプログラミング のため、使用していないですが、 UEFIのプログラムを作る 開発環境等をオープンソースで 提供するプロジェクトです。

×