ブートローダーは4行で実装される
この記事は UEFI Advent Calender と 自作OS Advent Calender のためにかかれました。 22日(+3日)の記事です。 遅れてもうしわけないです。 ブートローダー まず、自作OSにはブートローダーによってカーネルをロードしなければはじまりません。 特段複雑なローダーがなくとも、たとえばBIOSから直接起動するのなら そのための形式で用意せねばなりません。 しかし、これが自作の入口としてかなりの関門になってしまっているのではないでしょうか。 なので自作OSからはちょっと離れますが、ブートローダーについて書きます。 UEFI ということで、UEFI Appsとしてブートローダーを実装する話です。 まず、UEFIとは何かについては UEFI Advent Calender 1日目の記事 を、 そしてこの作業の前知識として UEFI Advent Calender 12日目の記事 を参照していただけると良いです。 一応ざっとUEFIについて触れておくと、 BIOSの代替規格のファームウェアで、多機能かつ高機能。また、可搬性も考えられています。 UEFIのファームウェア上で直接動作できるUEFI Appを記述するには、 tianocoreがBSDLで公開しているEDKというツールキットか、 Gnu toolchainと合わせて使えるgnu-efiというBSDLのライブラリを用います。 EDKでも一応gcc等が使えます。 EDKは、パッケージとして豊富にライブラリが揃っており、libcやbsd socket、pythonがつかえます。 gnu-efiは、Linux/OS Xの上で開発するにはEDKより手軽にはじめる事ができます。 UEFI AppはWindows同様PE形式のバイナリなので、 実はEDKやgnu-efiがなくとも*.dllなバイナリ(つまりrelocatableでsharedなPEバイナリ)を作成してから、objcopyコマンドとかで必要な部分だけ取り出して拡張子がefiのファイルにするとかでも一応動作できるバイナリを作る事は可能です(が、面倒です) UEFIのAPIであるProtocolは初期状態でもFile I/OやGraphicsの処理まで揃っていますが、