MacのUEFIは仕様と違う挙動があるなど色々と問題点があり、適当に作ったUEFIアプリケーションを動かすのは難しいかもしれません。

そんな状態でUEFIアプリケーションからPXEブートさせるためのヒントのようなもののメモです。

もしかすると、新しめのMacでiPXEが起動できない問題の原因にも間接的に関係あるかもしれません(未検証)。

  • そもそも、MacのUEFIにはEFI_PXE_BASE_CODE_PROTOCOLがない
  • そのため、EFI_DHCP4_PROTOCOL, EFI_MTFTP4_PROTOCOLあたりをそのまま使う必要がある
  • EFI_MTFTP4_PROTOCOLはどうやらまともに動きそう
  • しかしEFI_DHCP4_PROTOCOL.Start()EFI_ACCESS_DENIEDを返すという、仕様外の挙動をする
  • 幸いEFI_SIMPLE_NETWORK_PROTOCOLEFI_UDP4_PROTOCOLはまともに動くようなので、これらを使って手動DHCPをするしかなさそう
  • EFI_DHCP4_SERVICE_BINDING_PROTOCOL等の重要そうなプロトコルをUninstallProtocolInterface()すると、実際にはそのプロトコルのインターフェースが存在するにも関わらずEFI_NOT_FOUNDが返ってくる