カーネル ソフトウェアはアセンブリ コードと C コードが混在しており、U-Boot からロードされます。U-Boot は、アーキテクチャ、プロセッサ、およびマシン タイプをチェックするエントリ ポイント head.S に渡されます。head.S は、メモリ管理ユニット (MMU) の設定、ページ テーブルの作成、仮想メモリのセットアップを実行した後、start_kernel を呼び出します。start_kernel 関数は、最大約 86 のサブシステムで構成されます。
ブートで重要なのが setup_arch です。setup_archでは、デバイス ツリーから抽出される CPU やマシンの設定など、アーキテクチャに依存するすべての初期化が実行されます。次に、setup_arch は、rest_init に達するまで、メモリ割り当て、スケジューリング、ファイル キャッシュといったカーネル サービスなど、earlycon および複数のサブシステムを初期化します。kernel_init は do_basic_setup を実行し、ファイル システム内の init の呼び出しを試みます。これにより、現在のカーネル スレッドが init プロセスに変更されます。この時点で問題が発生した場合、ファイル システムを見つけることができない、またはマウントできない可能性があります。PetaLinux で Linux プロジェクトが作成された場合、PetaLinux のコンフィギュレーションでファイル システムを確認できます。
問題がカーネルの初期化で発生した場合、ブート ログで各サブシステムを追跡して、カーネルのブート問題をデバッグできます。詳細は、PetaLinux イメージ デバッグ シリーズ: Vitis で Linux カーネルをデバッグする方法を参照してください。