EFIとは、拡張可能なファームウェアのインターフェイス、UEFIとして標準化されている現在主流のBIOS(バイオス)です。 2015年には「30日でできる! OS自作入門」を参考に、旧BIOSで動くPCで起動する「IchigoJam for PC」を作ってましたが、UEFI対応にチャレンジする良いきっかけ「ゼロからのOS自作入門」が発売されました!
気になるのはメインで使っているArmアーキテクチャ、M1 Macで楽に開発できるかどうかでしたが、先人の知恵を発見!
「Mac で始める「ゼロからのOS自作入門」」
USBメモリから無事ブートしました!
動いているC言語のプログラムはこちら。
#include <Uefi.h> #include <Library/UefiLib.h> EFI_STATUS EFIAPI UefiMain(EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *system_table) { for (;;) { Print(L"Hello EFI! "); } return EFI_SUCCESS; }
オープンソースの開発ツール「tianocore/edk2: EDK II」が使われています。API、いろいろ辿ってみることにしましょう。
オープンソースのエミュレーター「QEMU」を使って、M1 Mac上で動作確認もできたので、開発らくらく!
USBメモリでブートするには、出来上がった Loader.efi をFAT32でフォーマットし、efi/boot/bootx64.efi という名前と場所に置きましょう。
パーティションが2つになっているUSBメモリだとうまくいかないので、diskpartなどで1つにする必要があります。
あとはBIOS設定から直接ブートするか、USBメモリを優先にして再起動すればOKです。
IntelのMacBook Proなら動くのでは!?と期待しましたが、Optionキーを押しながら起動、選択はできますが、表示はされませんでした。惜しい!?
links
- ゼロからのOS自作入門
- 初版第1刷の正誤情報 | ゼロからのOS自作入門
- uchan-nos/mikanos: Educational Operating System