web-dev-qa-db-ja.com

UEFIシェルを使用したブート構成の復元

UEFIをサポートする組み込みボードを使用しています。これは新しい手の込んだボードであり、American Megatrends BIOSとUEFIシェルが付属しています(組み込みボード上のPC BIOSではなく、ブートローダーの処理に慣れています)。

取締役会の詳細はそれほど重要ではありません。

重要なのは、特定の条件下(ソフトウェアで、誤った方法でPCIスペースに書き込んでいる場合)に、オンボードフラッシュのブートセクターをホース接続できることです。

このハードウェアはREMOTEのハードウェアになるため、どこにも行かずにUSBを差し込んで、これを再フラッシュするオプションはありません。

BIOSシェルにこれを実行させるスクリプトを作成したいと思います。マシンがホース接続されていて、デプロイされたシステムのブートセクターが破損している場合は、復元シーケンスを自動的に実行したいと思います。このようなことは可能ですか? UEFIシェルでそれを行うことはできますか?とにかくこれは実行可能ですか?

UEFIが「安全な」ブートを提供するために作成されたことを理解しました。意図したのとは逆のことをしている可能性があります。

1
Xofo

EFIはディスクのブートセクターを使用しません。したがって、システムに何が起こっているのかを誤解しているのではないかと思います。私のguessは、デバイスの起動順序を保持するNVRAMエントリに実際に損傷を与えているということです。この問題に対処する最も簡単な方法は、これらのエントリを使用せず、代わりにEFIブートローダーにEFI/BOOT/bootx64.efi(または、より一般的にはboot{Arch}.efi{Arch}はアーキテクチャコード、x64はx86-64のアーキテクチャコード)という名前を付けることです。何らかの理由でこれを実行したくない場合は、およびEFIシェルがバージョン2シェル、EFIシェルスクリプトでbcfgコマンドを使用してジョブを実行できます。このコマンドは、 Arch Linux wikiIntelのサイト など、さまざまな場所でさまざまな範囲で文書化されています。残念ながら、古いバージョン1のEFIシェルはbcfgコマンドをサポートしていません。 、したがって、このオプションは機能しませんが、 TianoCoreソースコード から関連するコードを抽出し、古いシェルで使用できるスタンドアロンのbcfgコマンドを作成することは可能かもしれません。

本当にMBRに書き込む必要がある場合は、EFIシェルで作成するよりもCでEFIアプリケーションを作成する方が適切な場合があります。 EFIプログラミングのドキュメントはたくさんありますが、そのほとんどはUnixのマニュアルページのようなものです。トピックをすでに知っていることを前提としており、詳細を確認するだけで済みます。 簡単なチュートリアルの紹介 を作成しましたが、これは非常に基本的なものであり、ディスクI/Oについては説明していません。 (ディスクのMBRの読み取りと書き込みの方法を学ぶために、それとソースコードをgptsyncに使用できます。これは rEFInd、 の最後のカップルバージョンに含まれています。)

私が正しく理解していれば、何をするにしても(フォールバックファイル名を使用するだけで十分でない限り)、通常のブートシーケンスに合わせる必要があります。これは、デフォルトとして起動されたEFIシェルプログラムまたはバイナリプログラムのいずれかで可能になります。ただし、カスタムプログラムが「実際の」ブートローダーを起動して終了すること、または「実際の」ブートローダーが新しいプログラムの後に起動することを確認する必要があります。

3
Rod Smith