在Vitis中运行bootgen生成启动镜像出现报错的原因是什么?
问题根因及修复方案
你遇到的报错主要由以下几个可直接复现的配置错误导致,按优先级修复即可:
- 脚本路径不匹配
你写的bat脚本里删除旧文件的路径存在笔误:创建bif的目录是sw\boot,但删除旧文件时指向了不存在的sw\bootstuff\output.bif,旧的错误bif文件不会被正常清理,残留文件会导致bootgen读取失败。
同时脚本中使用%cd%获取当前工作目录,Vitis调用脚本时的默认工作目录和你手动执行bat的目录不一致,会导致生成的bif内的文件路径全部错误,bootgen找不到对应的fsbl、比特流、应用elf文件。 - BIF文件注释解析异常
新版本Vitis自带的bootgen对BIF文件头部的//注释格式兼容性差,你写的注释行里的参数和bootgen命令行传入的参数重复,很容易被误识别为无效指令导致解析报错。 - 环境与路径符号错误
如果是在普通系统cmd中执行脚本,没有加载Vitis的环境变量,会导致bootgen命令无法被正常识别;同时调用bat时使用Linux风格的正斜杠./,Windows下部分脚本解释器会识别异常。
修复步骤
第一步:修改create_bif.bat脚本
修改后的脚本如下:
@echo off :: 先切换到脚本所在目录的上层(即项目根目录,保证路径统一) cd /d %~dp0.. mkdir sw\boot :: 修正删除路径,和生成路径保持一致 if exist sw\boot\output.bif del sw\boot\output.bif :: 删掉冗余的注释行,避免解析错误 echo the_ROM_image: > sw\boot\output.bif echo { >> sw\boot\output.bif echo [bootloader]sw\fsbl\Debug\fsbl.elf >> sw\boot\output.bif echo sw\vivado\block_design_wrapper.bit >> sw\boot\output.bif echo sw\MYAPP0\Debug\MYAPP0.elf >> sw\boot\output.bif echo sw\MYAPP1\Debug\MYAPP1.elf >> sw\boot\output.bif echo sw\MYAPP2\Debug\MYAPP2.elf >> sw\boot\output.bif echo } >> sw\boot\output.bif @echo on
第二步:修改调用命令
:: 改成Windows风格的路径斜杠 CALL .\scripts\create_bif.bat CALL bootgen -image sw\boot\output.bif -arch zynqmp -o sw\boot\BOOT.mcs -w on
第三步:执行环境校验
所有命令必须在「Vitis Unified Software Platform Command Line」终端中执行,不要使用系统默认cmd,Vitis终端会自动配置好所有工具的环境变量和路径。
内容的提问来源于stack exchange,提问作者Enclustra xu5
相关产品推荐
相关产品推荐

