20

最近は学校のせいであまりコーディングをしていませんでしたが、OS 開発の仕事を再開したいと思いました。しかし最近、EFI が BIOS の代わりになるという話を耳にしました。BIOS ではなく EFI を使用するプラットフォーム用の OS を開発したいと考えています。とはいえ、どこから始めればいいのか分からず困っています。誰かが私を正しい方向に向けることができますか? OS開発にとってEFIが何を意味するのかを説明し、使用できるテスト環境(できれば仮想)を教えてください。率直に言って、EFIが何であるかはよくわかりません。また、ARMアセンブリを調べるのに時間を費やす必要がありますか? 私は x86 Assembly を知っていますが、それも時代遅れになっているように感じます。私は本当に迷っており、あなたの意見を聞きたいです。

ありがとう

4

3 に答える 3

28

EFIはUEFIの前身であり、人々が実際に使用しているものですが、それでもEFIと呼ばれることもあります。仕様はuefi.orgで入手できます。

UEFI仕様は、ブートローダーが知る必要があるかもしれないすべてを定義します。PI仕様は、業界でのコードの移植性のために使用するシリコンベンダーのインターフェイスを定義します。そのため、セキュアブートなどの一部の機能を動作させるには、Win8などの特定のバージョンのUEFI仕様(2.3.1cなど)に準拠する必要があるOSについて耳にします。これはすべて、EFIがBIOSに取って代わるものではなく、一部のオペレーティングシステムをサポートするためにBIOSが準拠しなければならない標準になることを意味します。

(仕様のコピーを入手した後)開始する場所は、SourceForgeのTianoCoreプロジェクトです。プロジェクトの1つに、UEFIの仮想マシンターゲットであるOVMFがあります。また、Windowsでコマンドプロンプトを実行するためのNT32ターゲットを確認することもできます。これらは、UEFIインターフェイスの上に配置されるブートローダーなどのアプリケーションを設計するときに使用するのに非常に優れたツールです。

アセンブリを学ぶ限り、そこから始めることはお勧めしません。知っておくべきことがたくさんあります。UEFIを作成した理由の一部は、新しいプログラマーがASMではなくCで作業できるようにするためです。UEFIにはASMを使用する場所がいくつかありますが、ビルドシステムがそれをスプライスするための詳細を処理します。通常、プロセッサの状態を巧妙に制御したり、書き込みから得られるパフォーマンスを制御したりする必要はありません。 ASM。それを行う他の唯一の理由はサイズです。BIOSの残りの部分はCになるため、ASMですべてを書き直さない限り、目的が果たせなくなります。これは誰もしません。仕様と、それらを使用して独自のUEFIアプリケーションを作成する方法を学ぶことに焦点を当てます。

于 2012-10-17T05:17:03.667 に答える
10

この質問への遅い回答ですが、その間に発見されなかった場合は、次の点を追加できます。

たぶん、OS開発にとってEFIが何を意味するのか説明してください

実際、多くはありません。まあ少しかもしれません。わかりました、説明しましょう。UEFI は、起動前段階のファームウェア環境を提供します。また、オペレーティング システムにいくつかのランタイム サービスを提供しますが、最終的には UEFI ファームウェアではなくオペレーティング システムがシステムを駆動することが予想されます。これらのサービスにより、ブート構成に関連するさまざまなアクティビティを実行できます

利点は、たとえばマルチブート 2に準拠するブートローダーを使用する準備ができている場合、実際に UEFI について何も知る必要がないことですExitBootServices()。ファームウェア環境。

EFI スタブを持つ Linux カーネルを生成することは可能であり、したがってブートローダーを「使わずに」起動します -このブログではその方法を示します。カーネルに対してこれを行うことができます - ファームウェアのビット数に一致する PE/COFF カーネルを生成する必要があるだけです。

そして、私ができるテスト環境(できれば仮想)を教えてください

VMWare Workstationを購入する余裕がある場合、これは非常に役立ちます。任意の部分をデバッグできるように gdb スタブを含めるだけでなく、仮想マシン定義ファイル (*.vmx) を編集して含めることもできます。

firmware="efi"

出来上がり、VMWare は完全に機能する UEFI 環境を起動します。Linux および Windows で動作します。

インターネット上のさまざまな投稿で、QEMU のセットアップと、もちろん VirtualBox について言及されています。VirtualBox EFI プラットフォームで既存のシステムを個人的に正常に起動したことはなく、QEMU を試したこともありませんが、QEMU や他のさまざまなエミュレーターはおそらく動作すると思います。

また、ARMアセンブリを調べるのに時間を費やす必要がありますか?

それはあなたの目的に依存します。アセンブリの問題については、OS を作成するために知っておく必要があると思います。どのプラットフォームで作成するかは問題ではないと思います。実際、複数のプラットフォームで作成すると、マシン間の違いがより理解できるようになると思います。

ただし、一般的に、アセンブリで OS 全体を記述しようとはしません。これの主な理由は時間です。これは趣味のプロジェクトだと思います。そのため、特に慣れていないアセンブリのデバッグに苦労するよりも、多大な努力に対して報酬を得る方がはるかに楽しいものになるでしょう。特に、コードの残りの部分をテストするのに十分な量がある場合は特に、習熟度が上がるにつれて、選択ビットをアセンブラーに置き換えることができます。

于 2013-04-26T14:43:46.580 に答える
1

qemu を使用して、いくつかの uefi アプリケーションの開発/テストを行うことができます。詳細については、これを参照してください

それとは別に、uefi に慣れ、uefi モデルでドライバー/アプリの開発を試みることを強くお勧めします。ローダーからネットワークスタックを実行したり、インフラストラクチャをネットブートしたり、おそらくよりきちんとしたプレOS GUIをセットアップしたりすることができます。これにより、uefi が得意になるだけでなく、プラットフォーム固有の詳細を理解するのに役立ちます。

それは私の意見ですが、上記のコメントは心に留めておくとよいでしょう。

于 2013-08-15T01:04:45.793 に答える