5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UEFIアプリ・ブートローダ開発のすゝめ!

5
Last updated at Posted at 2025-12-10

この記事では、UEFIアプリケーションの開発について説明します。
出来るだけ多くを網羅する資料を書き、自作OSの日本語資料増加への一助とならんと思いつつ、この記事を書いています。Sakadayoです。
本当に自作OS/低レイヤの日本語資料増えてほしい。

UEFIアプリケーションとは

https://uefi.org/specs/UEFI/2.11/02_Overview.html
の2.1.2 "UEFI Application"の章に記述される内容を見ると

Applications written to this specification are loaded by the Boot Manager or by other UEFI applications. 
(この仕様書に従い書かれたアプリはブートマネージャーまたは他のUEFIアプリによってロードされる)

とあります。(決して上記文章のブートマネージャーはOSのブートローダではありませんから、混同に注意して下さい)

つまり、UEFIアプリとは「UEFIによって起動されるアプリ」なのです。
それを利用すれば、OSのブートローダーも作れる訳です。

この記事で学べる事・開発環境

開発環境

開発環境①(C言語の場合)
・コンピューター(64bit以上のCPU/約2GB以上のメモリを搭載したもの)
・GCCあるいはClang・LLVM(C言語コンパイラ)
・QEMU(仮想化ソフト)
・(Windowsの場合)USBメモリ等のディスク又はパーティションとそれ分の容量
開発環境②(Rust言語の場合)
・rustc、cargo等、ビルドシステム、コンパイラ
・コンパイラ以外は①と同じ

この記事で学べる事

・UEFIアプリケーションとは何か、又それを作る技能
・UEFI仕様書の解読の方法

UEFI仕様書解読

上のURLがUEFI仕様書のURLです。

まずはどこから解読を進めるべきか

これが、UEFIアプリのエントリポイントの定義です。
この定義に則って、UEFIはアプリをロードして実行します。
定義の内容を見てみましょう。

EFI_IMAGE_ENTRY_POINT(C言語)
typedef
EFI_STATUS
(EFIAPI *EFI_IMAGE_ENTRY_POINT) ( //一つ目の括弧
  IN EFI_HANDLE                  ImageHandle,
  IN EFI_SYSTEM_TABLE            *SystemTable
  );//二つ目の括弧

これをソースコードの定義ファイルに書くなりして、使用します。
ツールを使えば定義ファイルに書かずとも済むので楽です。
EDKIIやGNU-EFI等のツールがあるのですが、ここでは割愛します。

このコードの意味する所

typedefはC言語で型を定義するワードです。
EFI_STATUSが返り値で二つ目の二個が引数のEFI_IMAGE_ENTRY_POINTを定義すると言う意味になるそうです。(C言語文法あやふやですみません)

EFI_HANDLEとは
EFIAPI,INとは

これはOverview(概要)章によるとmnemonicです。
mnemonicとは辞書を引くと「記憶を助ける何か」の意味があり、つまりはソースコードでは書かずとも問題が無いです。
EDKII等のツールの定義ファイルでも、#define IN 0となっています。
とりあえずは、定義はしますがEDKIIの定義方法に準拠します。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?