xnu
Qemu内で完全なカーネルを実行できるようにするという最終的な目標を持って、カーネルを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 )カーネルをさまざまなプラットフォームに移植するための適切なガイドはありますか?