この記事では、UEFIアプリケーションの開発について説明します。
出来るだけ多くを網羅する資料を書き、自作OSの日本語資料増加への一助とならんと思いつつ、この記事を書いています。Sakadayoです。
本当に自作OS/低レイヤの日本語資料増えてほしい。
<この記事で解説すること>
①そもそもUEFIアプリとは何か(用語と共に)
②開発環境整備方法
③コードの書き方
UEFIアプリケーションとは
PC起動~OS開始までをサポートするUEFI。
UEFIがサポートするPC起動~OS開始までにUEFIアプリが関与しています。
例えばあなたが今見ているOSのブートローダもその一つ。
UEFIアプリでは様々な事が実行可能で、まとめても
・メモリ/ディスク操作
・I/Oデバイス操作
・ネットワーク通信
・セキュアブート
UEFIアプリ稼働の仕組み(主な用語を添えて)
ハンドルとプロトコル
UEFIはデバイス一つずつを取得し、ハンドルを付与します。
ハンドルにはプロトコル(機能)が伴っています。
そのハンドルから、プロトコル(機能)を呼び出す訳です。
プロトコルについては仕様書に詳しく書いてあります。
大体まとめてみると...
・コマンドラインの操作が出来るプロトコル
・ネットワークと通信が出来るプロトコル
・セキュアブートが出来るプロトコル
こんな感じで様々ある訳です。
開発環境を整備する
①Clang/LLVMとGCCコンパイラ
②QEMUとOVMF
③空のUSBメモリ・SDカードあるいは新しいパーティション
①は、https://github.com/llvm/llvm-project/releasesより。
②については、これは仮想化ソフトとその中でUEFIを起動する手段です。
https://qiita.com/sakadayo/items/81eace58a240e7e97f09
以前の私の記事で、これを見れば②についてが分かります。
③は実行する際にアプリを入れ込むIMGファイルが必要だからあります。
(IMGファイル=仮想ハードディスク)