借り初めのひみつきち

仮ブログです。

バイバイ、 gnu-efi

gnu-efi は手軽でしたが、不満もありました。

  • Linux では簡単に環境構築できるが OSX ではうまく導入できなかった。
  • 一度 ELF で出力した後 PE-COFF に変換するのでかっこわるい。
  • コンパイラの ABI が UEFI の仕様と異なる。変換するラッパーのせいで引数チェックができない。

最後が特に致命的で、一度引数ミスではまったことがあるので gnu-efi を辞めたいと思っていました。


UEFI の開発といえば EDK を使う方法がありますが、導入がめんどうだったり特殊ツールがたくさんあったりであまり触りたくないかんじでした。

UEFI アプリは極論をいうと仕様書を見ながら自分でインターフェースを定義すれば好きなコンパイラで開発できます。

しかし、 UEFI は PE-COFF で出力できるコンパイラが必要になり、 gcc で coff に対応するには再コンパイルが必要になるのでとても手軽には環境構築できません。


そんなあるとき、 hikalium さんに教えてもらった方法で簡単な Makefile で手軽に UEFI アプリが作れることがわかりました。

github.com

横着して付属の efi.h をパクってみたところ、定義されていない必要な API が結構あったので efi.h を作り直すことになりました。。

UEFI 仕様書をコピペしながら作りましたが UEFI 仕様書は結構適当に作られていて、見た感じ何となく言いたいことはわかるけどコピペするとうまく動かないコードがたくさんあるので修正も結構必要でした。

Hello World を実行するために必要な EFI_SYSTEM_TABLE の定義だけで 1000 行くらいありました。


Hello World が動いたので次は過去に実際に作ったアプリで対応してみます。

github.com

できました。