UEFI 環境で EFI アプリケーションをビルドして手動で実行できます。しかし、起動時にアプリケーションを自動的に実行したいと考えています。
ブートローダーにこれを行うように指示する方法はありますか、それともアプリケーションを自動的に実行するためにドライバーに変換する必要がありますか? FDF、DEC、DSC、または INF ファイルに欠落しているエントリはありますか?
UEFI 環境で EFI アプリケーションをビルドして手動で実行できます。しかし、起動時にアプリケーションを自動的に実行したいと考えています。
ブートローダーにこれを行うように指示する方法はありますか、それともアプリケーションを自動的に実行するためにドライバーに変換する必要がありますか? FDF、DEC、DSC、または INF ファイルに欠落しているエントリはありますか?
アプリケーションを呼び出す startup.nsh スクリプト ファイルを UEFI シェル ブート ドライブに追加できます。
次のリンクは、シェルでスクリプトを操作するための便利なリファレンスとして役立つはずです: UEFI Shells and Scripting . 具体的には、セクション 3 (EFI シェル スクリプト) を参照してください。
ただし、実際に独自のファームウェアを構築している場合は、起動可能な EFI イメージの作成を検討し、デフォルトの起動オプションをこのバイナリに設定することもできます。これは、ROM の一部としてバイナリを含める場合に最も便利ですが、通常の起動オプションとして表示されるようにファイルシステムをセットアップするのは少し面倒かもしれません。
また、ファームウェア ソースに完全にアクセスできる場合は、BDS ドライバーからバイナリを読み込んで呼び出すこともできます。他のイメージを起動しないスタンドアロン デバイスを作成することを特に目指している場合を除き、この方法はお勧めしません。
@NicholasEmbryの回答には必要なものがほとんどすべて含まれていますが、いくつかのことを明確にし、その分野で最近の改善を追加したいと思います。
UEFI アプリケーション イメージをブート オプションに追加することは、ファームウェアのソース コードがない場合に最もよく知られている方法であり、典型的な状況です。特別な起動可能なイメージを作成する必要はありません。単純な UEFI アプリケーション イメージである必要があります。つまり、次のものINF
が含まれている必要があります。
MODULE_TYPE = UEFI_APPLICATION
このオプションは、オプション ROM だけではなく、すべての UEFI 読み取り可能メディア用です。たとえばFAT32
、ストレージにパーティションを作成し (USB、HDD、SSD など、ファームウェアで読み取り可能である必要があります)、このパーティションにアプリケーション イメージを配置できます。次に、UEFI シェルを起動し、bcfg
コマンドを使用して起動順序を変更します。
bcfg
コマンドは、BIOS ベンダーによってブロックされる可能性があります。その場合は、この投稿の手順に従ってください。これは、USB スティックを使用してrEFIndを起動しています。ツールrEFInd
が含まれており、それを使用できるようになります。bcfg
使い方はbcfg
?
すべてヘルプに記載されていますhelp bcfg -b
。-b
UEFIページャーです。ショートカットが好きな人のために、このコマンドはシステムのすべての起動オプションを表示します:
bcfg boot dump -v
次のコマンドを使用してアプリケーションを追加できます。
bcfg boot add <boot_pos> <path_to_uefi_image> <boot_order_name>
<boot_pos>
- 起動順序の位置。通常、OS の前にアプリケーションを置きたいことに注意してください。OS の前に空きブート オプション番号がない場合は、もちろん OS を 1 つ下のオプションに移動bcfg boot mv <old_pos> <new_pos>
し、その間にアプリケーション イメージを追加できます。
<path_to_uefi_image>
- UEFI イメージへのパス。これは UEFI 読み取り可能なパスです。fs0:\foobar.efi
<boot_order_name>
- これは、アプリケーションがブート BIOS メニューに表示される方法です