当前位置: 首页 > news >正文

【ZYNQ MP开发】Linux下使用bootgen命令生成BOOT.bin报错架构不对问题探究

1 问题背景与描述

       在移植 u-boot 时,涉及到把多个文件打包进 BOOT.bin,经过查询,使用以下脚本,使用 Vitis 带的 bootgen 工具打包 BOOT.bin:

#!/bin/bashTARGET_F=./target_bootfile
BIF_FILE=${TARGET_F}/sd_image.bifecho "//arch = zynqmp; split = false; format = BIN"   > ${BIF_FILE}
echo "the_ROM_image:"                                 >>${BIF_FILE}
echo "{"                                              >>${BIF_FILE}
echo "  [bootloader]${TARGET_F}/zynqmp_fsbl.elf"      >>${BIF_FILE}
echo "  [pmufw_image]${TARGET_F}/pmufw.elf"           >>${BIF_FILE}
echo "  ${TARGET_F}/system.bit"                       >>${BIF_FILE}
echo "  [destination_cpu=a53-0,exception_level=el-3]${TARGET_F}/bl31.elf" >> ${BIF_FILE}
echo "  [destination_cpu=a53-0,exception_level=el-2]${TARGET_F}/u-boot.elf" >>${BIF_FILE}
echo "}"                                              >>${BIF_FILE}bootgen -image ${BIF_FILE} -o ${TARGET_F}/boot/BOOT.bin -w on

       报错是说,它认为是 ZYNQ-7000 系列器件(pmufw.elf 是 ZYNQ MP 系列独有)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2 问题分析

       但是问题就来了,我们在脚本中,已经指定了芯片架构为 zynqmp

echo "//arch = zynqmp; split = false; format = BIN"   > ${BIF_FILE}

       这个脚本相当于是创建一个 .bif 文件(Xilinx 的 bootgen 针对的就是这个类型的文件),往里面写入需要包含进 BOOT.bin 的部分,难道是这个文件写入有问题?查看其中内容如下图所示:

​       但是文件内容并没有因为编码等问题而与我们脚本中写入的内容不一致。

       进一步怀疑,是不是因为路径太长的原因,单独把文件放到一个文件夹中,手动输入命令:

source /tools/Xilinx/Vitis/2020.1/settings64.sh
bootgen -image sd_image.bif -o /boot/BOOT.bin -w on

​       同样还是报错!

       这时突然想到,我们习惯于在 Windows 下使用 Vitis,Vitis也有一个 BOOT.bin 的生成工具,而且它是图形化的,按下图方式打开:

       再把文件拷贝回 Windows 进行测试,把 ubuntu下的 .bif 文件也移过来,并对文件路径进行一定修改:

//arch = zynqmp; split = false; format = BIN
the_ROM_image:
{[bootloader]./zynqmp_fsbl.elf[pmufw_image]./pmufw.elf./system.bit[destination_cpu=a53-0,exception_level=el-2]./u-boot.elf
}

       这样操作后,在Vitis选择这个 .bif 就能自动地包含需要被包含进 BOOT.bin 的部分:

​       运行,发现成功生成了 BOOT.bin

​       但是问题出在了哪里呢,仔细观察这个页面,我们发现,它最上方也是有一个 Architecture 选项的,因为我们这里使用 ZYNQ MP 的工程打开,所以这里默认给匹配成了 Zynq MP,如果我们在打开 Vitis 时,不选择已有工程的目录,不创建工程打开这个页面,我们看到,其默认是 Zynq 的架构,这也就与我们在 Ubuntu 下遇到的问题一致了。

​       进一步的,我们考虑怎么在命令行对这个 arch 进行修改。在 Ubuntu 下常使用 -help 后缀查看命令的具体用法:

bootgen -help

       结果如下:

​       注意到它确实可以加入一个 arch 参数!那合理推测,我们只要把脚本中的 bootgen 命令手动添加参数 arch ,指定架构为 zynqmp 即可。

3 问题解决

​       从 2 中分析可知,我们只需要修改脚本 bootgen 命令,添加参数 -arch zynqmp 即可,这是由于这个参数,如果我们不指定的话,它就默认为 zynq

bootgen -arch zynqmp -image ${BIF_FILE} -o ${TARGET_F}/boot/BOOT.bin -w on

​       再运行脚本,就生成 BOOT.bin 成功了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

相关文章:

  • 科学养生指南:解锁健康生活新方式
  • 3200温控板电路解析
  • XMC4800 芯片深度解读:架构、特性、应用与开发指南
  • WebRTC通信技术EasyRTC音视频实时通话安全巡检搭建低延迟、高可靠的智能巡检新体系
  • 视频生成上下文并行方案
  • SQL 中 ROLLUP 的使用方法
  • 大模型面经 | 春招、秋招算法面试常考八股文附答案(三)
  • vue3 主题模式 结合 element-plus的主题
  • 《数据结构之美--双向链表》
  • Spring_MVC 高级特性详解与实战应用
  • Debian GNU/Linux的新手入门介绍
  • 【Spring】深入解析 Spring AOP 核心概念:切点、连接点、通知、切面、通知类型和使用 @PointCut 定义切点的方法
  • 安装Github软件详细流程,win10系统从配置git到安装软件详解,以及github软件整合包制作方法(
  • BUUCTF PWN刷题笔记(1-9)
  • LangChain与图数据库Neo4j LLMGraphTransformer融合:医疗辅助诊断、金融风控领域垂直领域、法律咨询场景问答系统的技术实践
  • 垂直行业突围:工业软件在汽车、航空领域的 “破壁” 实践
  • Google Store 如何利用 glTF 3D 模型改变产品教育
  • 每日一题——数据中心网络地址规划
  • 解决离线部署气隙相关问题
  • 35、Python 异步编程入门与asyncio从原理到实战
  • 第1现场|俄乌互指对方违反复活节临时停火提议
  • 青海玉树州杂多县发生4.6级地震,震源深度10千米
  • 成功卫冕!孙颖莎4比0战胜蒯曼,获澳门世界杯女单冠军
  • 两岸基层民生发展交流会在浙江开幕
  • 张巍|另眼看古典学⑩:再创作让古希腊神话重获生机——重述厄勒克特拉
  • 十四届全国人大常委会第十五次会议将于4月27日至30日举行