2012-10-16 17 views
14

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

おかげ

答えて

22

EFIは、彼らはまだ時々EFIようなものに言及しているが、人々が実際に使用するものですUEFI、前駆体です。あなたはuefi.orgに関係する仕様を得ることができます。

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

開始する場所(仕様のコピーを入手した後)はthe TianoCore project on SourceForgeです。そこにあるプロジェクトの1つは、OVMFです。これは、UEFIの仮想マシンターゲットです。また、Windowsの下でコマンドプロンプトを実行するためのNT32ターゲットを調べることもできます。これらは、ブートローダーのようなアプリケーションをUEFIインターフェイスの上に置いて設計するときに使用する、本当に素晴らしいツールです。

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

6

この質問への後半の答えがありますが、平均時間でそれらを発見していない場合、私は、次の点を追加することができます:たぶんEFIはOSの開発に何を意味するのかを説明し

実際には、多くはありません。まあまあです。さて、説明しましょう。 UEFIは、ブート前の段階でファームウェア環境を提供します。また、オペレーティングシステムにはランタイムサービスもいくつか提供されますが、UEFIファームウェアではなくオペレーティングシステムが最終的にシステムを駆動することが期待されます。これらのサービスではさまざまなブート構成関連アクティビティ(example)を実行できます。ブートローダがでたExitBootServices()を呼び出して、マルチブート仕様に応じてあなたをロードします -

利点は、あなたが実際にUEFIについて何を知っている必要はありませんmultiboot 2言うに準拠ブートローダを使用する用意がある場合ということですUEFIの用語はファームウェア環境を破壊します。

EFIスタブを持つLinuxカーネルを作成することができるため、ブートローダなしでブートする - this blog shows you how。カーネルでこれを行うことができます。ファームウェアのビット数に一致するPE/COFFカーネルを作成するだけで済みます。

と多分あなたはVMWare Workstationに余裕があれば、私たちは

、これは大規模なあなたを助けることができます(好ましく仮想)どのようなテスト環境を教えてください。だけでなく、あなたが何かのどの部分をデバッグすることができ、あなたも(* .vmxファイル)

firmware="efi" 

と出来上がりを含むように仮想マシン定義ファイルを編集することができ、VMwareは完全に働いてUEFIを起動するようGDBスタブを含みます環境。 LinuxとWindowsで動作します。

インターネット上のさまざまな記事には、QEMUの設定やもちろんVirtualBoxも含まれています。私はVirtualBox EFIプラットフォーム上の既存システムを正常に起動したことは一度もありませんでしたが、QEMUを試したことはありませんでした。

また、ARMアセンブリを調べるのに時間がかかるでしょうか?

これは目的によって異なります。アセンブリの問題については、OSを書くことを知っておくべきだと思います。私はあなたが書いたプラットフォームにとって重要ではないと思っています。実際、複数の文章を書いてみると、マシンの違いをより感謝してくれるはずです。

しかし、一般的には、アセンブリ全体にOS全体を書き込もうとはしません。これの主な理由は時間です - 私はこれがホビープロジェクトだと思っていますので、広範な努力の報酬を得ることはアセンブリをデバッグしようとするよりもはるかに面白いでしょう。より熟練した方がいつでも、選択ビットをアセンブラで置き換えることができます。特に、テストするコードの残りの部分が十分にある場合は、そうすることができます。

0

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

uefiに精通し、uefiモデルでドライバ/アプリケーション開発をやってみることをお勧めします。ローダーからネットワークスタックを実行したり、インフラストラクチャをネットブーティングしたり、おそらくもっと古いOSのGUIを設定したりするようなことを試すことができます。これにより、あなたはuefiをうまく活用できるだけでなく、プラットフォームの詳細を理解するのに役立ちます。

私の言うことですが、上記のコメントは覚えておくと良いです。

関連する問題