AR# 51956

Zynq-7000 サンプル デザイン - 複数の実行パーティションを読み込むための 14.2 FSBL の変更

説明

14.2 では、イメージで最初に検出される実行パーティションにコードを渡すため FSBL が構築されています。

イメージが次のように構築されていると、application1.elf がすぐに実行され、application2.elf がフラッシュからメモリにコピーされません。

fsbl.elf
bitstream.bit
application1.elf
application2.elf

ソリューション

[New] → [Application Project] をクリックし、スタンドアロンの FSBL を選択して、FSBL テンプレートを作成します。

FSBL を次のように変更し、両方の実行パーティションを読み込んで、最初のパーティション (application1.elf) を実行できるようにします。

1. image_mover.c で、グローバル変数を次のように定義します。

u32 ExecutionAddress = 0;

2. 次のアルゴリズムをインプリメントするため、mage_mover.c の update_status_reg セクションの下にある次のコードを変更します。

2.1. パーティションを読み込んだ後、それが実行パーティション (application1.elf など) であることを確認します。そうである場合は、変数 ExecutionAddress に実行アドレスを格納し、ほかのパーティションの検索を続けます。
2.2 ほかのパーティションの読み込みを続けます。この例では、application2.elf を読み込みます。
2.3. 最終パーティションを読み込んだら、ExecutionAddress をハンドオフ アドレスとして使用します。application1.elf が実行されます。

注記 : このコードはフォールバックに対してはテストされていません。

注記 : 現時点では、今後のリリースで、よりよく安定したテスト済みの FSBL ソリューションをインプリメントする予定です。

update_status_reg:

..............................................

if (IsLastPartition(Hap)) {
debug_xil_printf("There are no more partitions to load\r\n");

 NextPartition = PartitionNum;

 // CHANGED: the last partition has benn loaded, what to do next?

if ( ExecutionAddress ) {
// CHANGED: a previous "code partition" has been loaded

 

debug_xil_printf("CHANGED: ready to execute at %x\r\n",ExecutionAddress);

ExecAddr = ExecutionAddress;

SkipPartition = 0;

} else {

// CHANGED: no "code partition" has been found
debug_xil_printf("CHANGED: There are no partitions to execute\r\n");
while(1) {
        PatWDT();

}

}
} else if(IsEmptyHeader(Hap)) {

debug_xil_printf("Empty partition header %x\r\n", NextPartitionAddr);
OutputStatus(EMPTY_PARTITION_HEADER);
return MOVE_IMAGE_FAIL;

} else { // CHANGED: it's not the last partition but it's the one to execute later.


if ( SkipPartition == 0 ) {

SkipPartition = 1;
ExecutionAddress = ExecAddr;
debug_xil_printf("CHANGED: does not execute but prepare to.\r\n");

}
}

..............................................

AR# 51956
日付 04/09/2013
ステータス アクティブ
種類 一般
デバイス
ツール