Xilinx Vitis 2020工程源目录修改

目录

  • 1 背景
  • 2 分析
  • 3 解决
  • 4 使用
    • 4.1 修改路径
    • 4.2 编译工程
      • 4.2.1 清理工程
      • 4.2.2 编译工程

1 背景

  Xilinx Vitis可以做standalone程序开发,不过其工程中使用的路径为绝对路径。工程更换位置后编译将会显示错误。例如:源目录为D:/work,复制到同事电脑上放到C:/work(同事电脑只有一个C盘)。利用Vitis打开工程编译会有一堆错误,提示文件找不到。

2 分析

通过分析Vitis工程中有三个工程文件于路径相关:

  • xxx_system.sprj 其格式是一个xml文件,其中字段:
    • platform 存放.xpfm文件
  • xxx.prj 其格式是一个xml文件,其中字段:
    • platform 存放.xpfm文件
    • location 存放xxx.prj文件路径
  • platform.spr 平台文件,其格式是json文件,其中字段:
    • platHandOff 存放xsa文件路径
    • qemuArgs 存放qemu_args.txt文件全路径,是Vitis配置文件,与Vitis安装位置有关。
    • qemuData 存放qemu Data文件路径,与Vitis安装位置有关。

修改说明:

  • 将以上文件路径根据新路径(C:/work)替换旧路径(D:/work)即可。
  • 如果Vitis安装路径不同,需要更新qemuArgs和qemuData字段对应路径。

3 解决

可以通过手动修改以上文件是可以解决问题,不过手动修改容易出错误。更好的方式是写一脚本来做文件路径替换,这个脚本需要处理xml和json文件。Python语言内置xml和json库,是理想语言选择。
Python脚本如下:

import os
import json
import xml.etree.ElementTree as ETdef get_project_files(path):sprjfile = ""prjfile = ""sprfile = ""for root, _, files in os.walk(path):for file in files:_, ext = os.path.splitext(file)if ext == ".sprj":sprjfile = os.path.join(root, file)if ext == ".prj":prjfile = os.path.join(root, file)if ext == ".spr":sprfile = os.path.join(root, file)return (sprjfile, prjfile, sprfile)def get_file(path, filename):fullfilename = ""for root, _, files in os.walk(path):for file in files:if file == filename:fullfilename = os.path.join(root, file)breakreturn fullfilenamedef update_file(filename, value1, newvalue1, value2 = None, newvalue2 = None):file = open(filename, "r", encoding="ascii")fileData = file.read()file.close()fileData = fileData.replace(value1, newvalue1)print(value1, " => ", newvalue1)if value2 != None and newvalue2 != None:fileData = fileData.replace(value2, newvalue2)print(value2, " => ", newvalue2)file = open(filename, "w", encoding="ascii")file.write(fileData)file.close()def update_sprj(sprjfile, path):tree = ET.parse(sprjfile)attrib = tree.getroot().attribplatform = attrib.get("platform", "")filename = get_file(path, os.path.basename(platform))filename = filename.replace("\\", "/")update_file(sprjfile, platform, filename)def update_prj(prjfile, path):tree = ET.parse(prjfile)attrib = tree.getroot().attribplatform = attrib.get("platform", "")location = attrib.get("location", "")platform_filename = get_file(path, os.path.basename(platform))location_dirname = os.path.dirname(prjfile)platform_filename = platform_filename.replace("\\", "/")location_dirname = location_dirname.replace("\\", "/")update_file(prjfile, platform, platform_filename, location, location_dirname)def update_spr(sprfile, path, xilinx_qemu_path):file = open(sprfile, "r", encoding='utf-8')spr_data = json.load(file)file.close()platHandOff = spr_data.get("platHandOff", "")systems = spr_data.get("systems", {})platHandOff_filename = get_file(path + "\\board", os.path.basename(platHandOff))platHandOff_filename = platHandOff_filename.replace("\\", "/")update_file(sprfile, platHandOff, platHandOff_filename)if len(systems) == 1:domains = systems[0].get("domains", [])if len(domains) >= 2:qemuArgs = domains[1].get("qemuArgs", "")qemuData = domains[1].get("qemuData", "")update_file(sprfile, qemuData, xilinx_qemu_path)path = 'E:\\g\\work'
xilinx_qemu_path='D:/Xilinx/Vitis/2020.1/data/emulation/platforms/zynq/qemu/'
sprjfile, prjfile, sprfile = get_project_files(path)print("update file: ", sprjfile) # xml file
update_sprj(sprjfile, path)
print()print("update file: ", prjfile) # xml file
update_prj(prjfile, path)
print()print("update file: ", sprfile) # xml json
update_spr(sprfile, path, xilinx_qemu_path)

说明:

  • 脚本需要两个参数:
    • 工程所在路径的上一路径
    • Xilinx的qemu路径
  • get_project_files 函数根据工程路径查找三个工程文件。
  • update_sprj 更新sprj文件
  • update_prj 更新prj文件
  • update_spr 更新platform.spr文件

4 使用

4.1 修改路径

E:/g/work路径如下:

.
├── board
└── workspace├── app_platform├── app└── app_system

说明:

  • board 文件夹存放xsa文件
  • workspace 为工程路径:
    • app_platform 为平台路径
    • app_system 为系统路径
    • app 为应用路径

运行Python脚本

python3 patch.py
update file:  E:\g\work\workspace\app_system\app_system.sprj
X:/work/workspace/app_platform/export/app_platform/app_platform.xpfm  =>  E:/g/work/workspace/app_platform/export/app_platform/app_platform.xpfmupdate file:  E:\g\work\workspace\app\app.prj
X:/work/workspace/app_platform/export/app_platform/app_platform.xpfm  =>  E:/g/work/workspace/app_platform/export/app_platform/app_platform.xpfm
X:/work/workspace/app  =>  E:/g/work/workspace/appupdate file:  E:\g\work\workspace\app_platform\platform.spr
X:/work/board/app_platform_v1.0.xsa  =>  E:/g/work/board/app_platform_v1.0.xsa
C:/Xilinx/Vitis/2020.1/data/emulation/platforms/zynq/qemu/  =>  D:/Xilinx/Vitis/2020.1/data/emulation/platforms/zynq/qemu/

4.2 编译工程

4.2.1 清理工程

在这里插入图片描述

在上图中选择Clean菜单项,清理工程
在这里插入图片描述

如上图所示全部清理

buildplatform.bat 50156 app_platform clean 
XSDB Server Channel: tcfchan#10
Cleaning the zynq_fsbl application.
rm -rf  sd.o  nand.o  image_mover.o  md5.o  fsbl_hooks.o  main.o  nor.o  qspi.o  rsa.o  ps7_init.o  pcap.o  fsbl_handoff.o zynq
_fsbl_bsp/ps7_cortexa9_0/lib/libxil.a executable.elf *.oCleaning the zynq_fsbl application, bsp
make -C ps7_cortexa9_0/libsrc/bram_v4_4/src -s clean make -C ps7_cortexa9_0/libsrc/coresightps_dcc_v1_7/src -s clean make -C ps7_cortexa9_0/libsrc/cpu_cortexa9_v2_9/src -s clean make -C ps7_cortexa9_0/libsrc/ddrps_v1_1/src -s clean rm -f ps7_cortexa9_0/lib/libxil.aCleaning the BSP for domain  - domain_ps7_cortexa9_0
make -C ps7_cortexa9_0/libsrc/bram_v4_4/src -s clean make -C ps7_cortexa9_0/libsrc/uartps_v3_9/src -s clean make -C ps7_cortexa9_0/libsrc/xadcps_v2_4/src -s clean make -C ps7_cortexa9_0/libsrc/xilffs_v4_3/src -s clean rm -f ps7_cortexa9_0/lib/libxil.a16:22:11 Build Finished (took 2s.891ms)

4.2.2 编译工程

在这里插入图片描述
在上图选择Build All菜单项编译工程

Generating bif file for the system project
generate_system_bif.bat 50156 E:/g/work/workspace/app_platform/export/app_platform/app_platform.xpfm domain_ps7_cortexa9_0 E:/g/work/workspace/app_system/Debug/system.bif
sdcard_gen --xpfm E:/g/work/workspace/app_platform/export/app_platform/app_platform.xpfm --sys_config app_platform --bif E:/g/work/workspace/app_system/Debug/system.bif --bitstream E:/g/work/workspace/app/_ide/bitstream/app_loadboardNI_v1.0.bit --elf E:/g/work/workspace/app/Debug/app.elf,ps7_cortexa9_0
creating BOOT.BIN using E:/g/work/workspace/app/_ide/bitstream/app_loadboardNI_v1.0.bit 
Running D:/Xilinx/Vitis/2020.1/bin/bootgen  -image E:/g/work/workspace/app_system/Debug/sd_card_temp/boot.bif -w -o i BOOT.BIN16:25:54 Build Finished (took 5s.226ms)

编译成功!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/372624.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

注册中心组成结构和基本原理解析

假如你正在设计和开发一个分布式服务系统,系统中存在一批能够独立运行的服务,而在部署上也采用了集群模式以防止出现单点故障。显然,对于一个完整的业务系统而言,这些服务之间需要相互调用并形成复杂的访问链路,一种可…

HTML(29)——立体呈现

作用:设置元素的子元素是位于3D空间中还是平面中 属性名:transform-style 属性值: flat:子级处于平面中preserve-3d:子级处于3D空间 步骤: 父级元素添加 transform-style:preserve-3d 子级定位调整子盒子的位置&a…

14-54 剑和诗人28 - 用于实时嵌入查找的向量检索

介绍 LLM 成功的关键因素是向量嵌入的使用。通过将文本转换为数字向量表示,我们可以将语义含义映射到数学向量空间。这使得模型能够根据向量之间的相似性在语言中概括模式。 随着我们的模型和数据集变得越来越大,高效地存储、组织和检索这些嵌入变得至关…

C++ Qt 自制开源科学计算器

C Qt 自制开源科学计算器 项目地址 软件下载地址 目录 0. 效果预览1. 数据库准备2. 按键&快捷键说明3. 颜色切换功能(初版)4. 未来开发展望5. 联系邮箱 0. 效果预览 普通计算模式效果如下: 科学计算模式效果如下: 更具体的功能演示视频见如下链接…

【易捷海购-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

ffmpeg滤镜-drawtext-命令行

使用 FFmpeg 在视频上添加文字可以通过 drawtext 滤镜来实现。这个滤镜允许你指定字体、大小、颜色、位置等。 基本用法 以下命令将 "Hello, World!" 添加到视频的顶部左侧: ffmpeg -i input.mp4 -vf "drawtexttextHello, World\!:fontcolorwhite…

JAVA Tesseract OCR引擎

Tess4j是一个基于Tesseract OCR引擎的Java库, Tesseract库最初由惠普实验室于1985年开发&#xff0c;后来被Google收购并于2006年开源。识别效果不好&#xff0c;速度还慢&#xff0c;但是好早好早了。 一、POM依赖 <!--OCR识别https://digi.bib.uni-mannheim.de/tesserac…

14-26 剑和侠客 – 预训练模型三部曲3 – 机器人时代来临

概述 在第 1 部分和第 2 部分中&#xff0c;我们讨论了适用于文本和图像任务的预训练模型&#xff0c;并探索了当今常用的模型。我们分析了这些模型的架构以及如何将它们用于特定任务。实现 AGI 所需的两个主要支柱是语言理解和机器的视觉能力。有许多任务与这两种能力有关。 …

Syncthing一款开源去中心化和点对点文件同步工具

Syncthing&#xff1a;一款开源的文件同步工具&#xff0c;去中心化和点对点加密传输&#xff0c;支持多平台&#xff0c;允许用户在多个设备之间安全、灵活地同步和共享文件&#xff0c;无需依赖第三方云服务&#xff0c;特别适合高安全性和自主控制的文件同步场景。 &#x…

4. kvm存储虚拟化

kvm存储虚拟化 一、命令行工具管理虚拟磁盘1、查看虚拟磁盘2、添加磁盘3、删除磁盘 二、qcow2格式的磁盘文件1、创建磁盘文件2、差量镜像/快速创建虚机2.1 创建差量镜像2.2 准备配置文件2.3 创建虚拟机2.4 批量部署虚拟机 三、存储池 storage pool1、类型2、在线迁移2.1 规划后…

【基于R语言群体遗传学】-14-种群起源的相对似然

我们可以将预测的基因型比例视为在种群中看到一组特定等位基因的概率。如果种群在等位基因频率上存在差异&#xff0c;我们可以使用基因型来推断个体起源于每个种群的相对可能性。大家可以先看一下之前的博客&#xff1a;群体遗传学_tRNA做科研的博客-CSDN博客 种群起源的相对似…

pytest-yaml-sanmu(六):YAML数据驱动测试

如果说 pytest 中哪些标记使用得最多&#xff0c;那无疑是 parametrize 了&#xff0c; 它为用例实现了参数化测试的能力&#xff0c;进而实现了数据驱动测试的能力。 1. 使用标记 parametrize 的使用需要提高两个内容&#xff1a; 参数名 参数值 pytest 在执行用例时&…

javascript DOM BOM 笔记

Web API API的概念 API&#xff08;Application Programming Interface,应用程序编程接口&#xff09;是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制的细…

el-scrollbar实现自动滚动到底部(AI聊天)

目录 项目背景 实现步骤 实现代码 完整示例代码 项目背景 chatGPT聊天消息展示滚动面板&#xff0c;每次用户输入提问内容或者ai进行流式回答时需要不断的滚动到底部确保展示最新的消息。 实现步骤 采用element ui 的el-scrollbar作为聊天消息展示组件。 通过操作dom来实…

高智能土壤养分检测仪:农业生产的科技新助力

在科技日新月异的今天&#xff0c;农业领域也迎来了革命性的变革。其中&#xff0c;高智能土壤养分检测仪作为现代农业的科技新助力&#xff0c;正逐渐改变着传统的农业生产方式&#xff0c;为农民带来了前所未有的便利与效益。 高智能土壤养分检测仪&#xff0c;是一款集高科技…

共筑智能未来 | 思腾合力闪耀2024世界人工智能大会(WAIC 2024)

在刚刚结束的2024世界人工智能大会暨人工智能全球治理高级别会议&#xff08;WAIC 2024&#xff09;上&#xff0c;思腾合力作为行业领先的人工智能基础架构解决方案提供商&#xff0c;凭借卓越的产品和解决方案&#xff0c;成为展会上的亮点之一。此次盛会不仅展示了全球人工智…

Android 性能优化之启动优化

文章目录 Android 性能优化之启动优化启动状态冷启动温启动热启动 耗时检测检测手段TraceView使用方式缺点 Systrace环境配置使用方式TraceView和Systrace比较 AOP统计耗时环境配置使用 优化白屏优化异步加载优化环境配置使用 延迟加载优化AppStartup 源码下载 Android 性能优化…

网站高性能架构设计——高性能缓存架构

从公众号转载&#xff0c;关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、缓存基础 1.缓存简介 缓存提升性能的幅度&#xff0c;不只取决于存储介质的速度&#xff0c;还取决于缓存命中率。为了提高命中 率&#xff0c…

HarmonyOS Next应用开发之系统概述

一、鸿蒙系统概述 鸿蒙系统可以分为华为鸿蒙系统&#xff08;HUAWEI HarmonyOS&#xff09;和开源鸿蒙系统&#xff08;OpenHarmony&#xff09;&#xff0c;华为鸿蒙系统是基于OpenHarmony基础之上开发的商业版操作系统。他们二者的关系可以用下图来表示&#xff1a; 1.1、…

Linux 创建新虚拟机的全过程图解

一、创建新虚拟机 1.选择自定义 2.直接下一步 3.选择稍后安装 4.设置虚拟机名和安装位置 5.配置处理器&#xff08;处理器数量&#xff1a;4、每个处理器的内核&#xff1a;2&#xff09; 6. 内存选择 7.网络类型 8. IO控制器类型-默认推荐 9.磁盘类型-默认推荐 10.选择虚拟磁…