PDI には、システムにロードする必要のあるすべてのイメージが含まれます。PLM はブート デバイスから PDI を読み出し、これらのイメージをイメージ ヘッダーに基づいて適切なメモリにロードします。
XilLoader は、各モジュールが PDI 内のイメージをロード/開始/参照するために必要なインターフェイスを提供します。XilLoader は XilSecure (セキュア ブート時)、XilPM (サブシステムの立ち上げ時)、およびブート ドライバー (ブート時) とも相互に通信します。
XilLoader には、次の関数があります。
- XLoader_LoadAndStartSubSystemPdi
- この関数は、PDI ポインターを入力パラメーターにとります。この API を呼び出すと、PDI イメージ内のイメージがロードされ、PDI 内のハンドオフ情報に基づいてサブシステムが開始されます。この API は、PDI 内のイメージおよびパーティション情報に基づいて PDI ソースから各イメージ パーティションを読み出してロードします。イメージがハンドオフを必要とするかどうかをチェックし、必要なら XilPM API を呼び出してハンドオフを実行します。
イメージは、CDO パーティションまたはサブシステム イメージとすることができます。イメージが CDO パーティションの場合、この API は PLMI 経由で CDO パーサー API を呼び出します。イメージがサブシステムの実行ファイル パーティションの場合、この API はパーティションをそれぞれのサブシステムのメモリへロードします。イメージをロードしたら、この API は PDI から CPI ID とハンドオフ アドレスを読み出し、これらの情報を使用して XilPM API を呼び出します。イメージのロードまたは開始中にエラーが発生した場合、この API は該当するエラー コードを返します。それ以外の場合は、SUCCESS が返されます。
- XLoader_RestartImage
- PDI の各イメージには、一意の ID があります。この関数はイメージ ID を入力にとり、PDI 内のイメージを特定してそのイメージをリスタートします。この API は、格納されたサブシステム情報をイメージ ID に基づいてブート時に解析し、PDI 内のイメージ番号とパーティション番号を取得します。次に、この API はイメージ パーティションを読み出し、これらをロードします。また、この API はイメージがハンドオフを必要とするかどうかをチェックし、必要なら XilPM API を呼び出します。イメージのリスタート中にエラーが発生した場合、この API は該当するエラー コードを返します。それ以外の場合は、SUCCESS が返されます。
動作シーケンス
ローダーとその他のコンポーネント間で発生する動作シーケンスは次のとおりです。
- ブート モードに応じたフラッシュ ドライバーを使用して PDI を読み出します。
- イメージ ヘッダーに基づき、ローダーがイメージに関する CPU の詳細を取得します。
- ローダーが XilPlmi API を使用して CDO をロードし、XilPM API を使用してプロセッサを開始/停止し、メモリを初期化します。
- ローダーが XilSecure を使用して、イメージに対してチェックサム計算、認証、または復号化を実行します。
ブート ドライバー
XilLoader は、次の高レベル ブート デバイス インターフェイス API を実装します。これらを呼び出して、ブート デバイスを初期化し、ブート デバイスから適切なサブシステム メモリへイメージをロードします。これらの API は、必要に応じて内部でドライバー API を呼び出します。
- フラッシュ ドライバー
- QSPI、OSPI、SD/eMMC ドライバーを使用してフラッシュ デバイスからイメージを読み出します。
- PMC DMA
- PMC DMA 関連機能のための API。