描述
在14.2中,FSBL被构建为将代码切换到图像中找到的第一个可执行分区。
如果您的图像结构如下,那么application1.elf会立即执行,而application2.elf不会从flash复制到内存。
fsbl.elf
bitstream.bit
application1.elf
application2.elf
解
通过选择New – > Application Project并选择独立的FSBL来创建FSBL模板。
按如下所示修改FSBL以加载两个可执行分区并执行第一个(application1.elf)。
1.在“image_mover.c”中定义全局变量:
u32 ExecutionAddress = 0;
2.修改“update_status_reg”部分下“image_mover.c”中的代码,以实现以下算法:
2.1。加载分区后,检查它是否是可执行分区(例如:application1.elf)。如果是这样,将执行地址存储到变量ExecutionAddress并继续查找其他分区。
2.2。继续加载其他分区。在我们的例子中,application2.elf
2.3。加载最后一个分区后,使用ExecutionAddress变量作为切换地址。 Application1.elf将执行。
注意:目前的计划是在未来版本中为FSBL实施更好,更稳定和经过测试的解决方案。
update_status_reg:
……………………………………….
NextPartition = PartitionNum;
//已更改:最后一个分区已加载,下一步该怎么办?
ExecAddr = ExecutionAddress;
SkipPartition = 0;
} else {
//已更改:未找到“代码分区”
debug_xil_printf(“已更改:没有要执行的分区\ r \ n”);
而(1){
PatWDT();
}
}
} else if(IsEmptyHeader(Hap)){
debug_xil_printf(“空分区头%x \ r \ n”,NextPartitionAddr);
OutputStatus(EMPTY_PARTITION_HEADER);
返回MOVE_IMAGE_FAIL;
} else {// CHANGED:它不是最后一个分区,但它是稍后执行的分区。
if(SkipPartition == 0){
SkipPartition = 1;
ExecutionAddress = ExecAddr;
debug_xil_printf(“CHANGED:不执行但准备。\ r \ n”);
}
}
……………………………………….
没有回复内容