6

xnuQemu内で完全なカーネルを実行できるようにするという最終的な目標を持って、カーネルをARMアーキテクチャに移植したいと思います。これは非常に難しい作業だとは思いますが、それでもやってみたいと思います。

私の知る限り、カーネルのエントリポイント(osfmk/arm/start.s)を記述して、一般的な初期化(MMUおよびPlatformExpert)を実行した後、Kext / IOKitサブシステムを起動し、CPU固有の拡張機能(トラップ、 GPIO、クロック)バイナリに事前リンクされているか、ブートローダーによってロードされます(NAND拡張機能がまだ利用できないため、カーネルがファイルシステムと対話できないため)。

ARM CPUがどのように機能するかについての一般的な考えはありますが、ポートをどこから始めればよいかさえわかりません。これは、次のxnu方法が完全にはわからないためです。

  • 低レベルのデバッグを実行します(起動中の早い段階でカーネルデバッグ機能を使用できないため)。
  • ARMブランチを残りのカーネルソースツリーと統合します(つまり、中のものosfmk/kernが機能していることを確認します)。
  • プラットフォームに依存しないカーネルを開始するための適切な環境を作成します(machine_startup());
  • メインカーネルコード内のいくつかのプラットフォーム固有のコードを修正します(プラットフォームコードのほとんどはに制限されてosfmk/platform_nameいますが、一部は他のコードに統合する必要がosfmk/kernあります)。

Linuxガイドと同じように、 XNU(または少なくともMach )カーネルをさまざまなプラットフォームに移植するための適切なガイドはありますか?

4

2 に答える 2

2

答えにはなりませんが、ヒントをいくつか。

「大物」は、プロセッサのシングルサイクルやレジスタの検査などを可能にする特別なハードウェアが接続されたシステムでこの種の作業を行います。また、同じ機能を持つエミュレータで多くの作業を行う場合があります。ハードウェア デバッガーのセットアップはおそらく構築する能力を超えています (そして購入するには少し高価です) が、エミュレーターは完全に実行可能です (そして、Gates と Allen が Altair BASIC で開始した方法です。Allen がエミュレーターを作成していなかった場合、Gates はハーバードではまだビデオゲームをプレイしています)。

完全なデバッガーではなく、何らかの文字ディスプレイが接続されている場合は、デバッグ中のコードに命令を埋め込んで、コードの進行に合わせて文字をディスプレイに書き込むことができます。パス A は次の場所 (どこかの予約済みメモリ ワードに保持されているインデックス) に "A" を書き込み、パス B は "B" などを書き込みます。

したがって、最初にエミュレーターを作成することをお勧めします。とにかく、プロセッサーに慣れるには良い方法です。

(ものを統合することに関しては、私はいつも「ねえ、ジェレミー! これを統合してくれませんか?」と言うだけです)

于 2011-12-23T13:08:10.613 に答える
1

すべてのソースコードが利用できるわけではないため、少し難しい問題が発生します。プラットフォームエキスパートのソースコードの一部はxnuソースの一部として利用できますが、com.apple.driver.AppleACPIPlatform.kextは利用できません。

于 2012-02-11T07:48:39.917 に答える