Xilinx Vitis 2020工程源目录修改

news2024/9/25 3:18:23

目录

  • 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 ET

def 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)
                break
    return fullfilename

def 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().attrib
    platform = 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().attrib
    platform = 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.xpfm

update 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/app

update 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 *.o

Cleaning 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.a

Cleaning 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.a


16: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.BIN

16:25:54 Build Finished (took 5s.226ms)

编译成功!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无忧易售:在线刊登配备定价计算器,精准定价赢市场

在跨境电商的浩瀚宇宙里,精准定价是通往成功的关键钥匙。无忧易售,推出在线产品刊登页面的定价计算器功能,精准定价,轻松管理,让您的商品在海外市场脱颖而出,让每一次销售都精准高效,利润满满。…

Selenium 的基本操作你知道哪些?

1. 前言 今天的推文,我们就来说说看,怎么实现模拟真人去打开微信读书网站。 2.需求分析和准备 整体的需求大致可以分为以下步骤: 打开chrome浏览器 打开百度网页 搜索“微信读书” 点击进入“微信读书”官网 搜索关键词“长安的荔枝” 点…

浮动刹车盘和固定刹车盘有什么区别

在讨论刹车系统的设计理念时,浮动和固定刹车盘无疑是两个重要的分支。 它们各自拥有独特的设计哲学、工作原理以及适用场景,这些差异直接影响到了制动系统的性能和耐久性。 浮动刹车盘和固定刹车盘在设计和工作原理上有显著的区别,主要体现在…

现代化木工装备建设新颖校园木工创客室

校园木工创客室是一个集木工制作、创意设计、科技融合与教育实践于一体的多功能空间。它为学生提供了一个动手实践、创新创造的平台,旨在培养学生的动手能力、创新思维、解决问题的能力以及团队协作能力。 木工创客室的设备选择应综合考虑需求、预算、品牌、质量、安…

【源码下载】瓦房店农村电商大数据平台模板

技术详细实现可在评论区留言。 概述 用 echarts 和 jquery 实现的大屏模板效果。 部分代码展示,访问 dt.sim3d.cn 获取源码: (function($){$.extend({initMapChartPath : function(options){var defs {domId : ,mapName:china,mapCenter:["5…

saas lims系统:适合中小检测机构的实验室管理系统

目前市面上的LIMS系统分为两种:一种是传统的LIMS系统,一次性买断,配置服务器,成本相对来说是比较高的。还有一种就是以白码LIMS云平台为代表的,基于SaaS模式的LIMS系统。白码LIMS系统提供saas模式购买,帮助…

网络安全设备——探针

网络安全设备探针是一种专门用于网络安全领域的工具,它通过对网络流量进行监控和分析,帮助发现和防止网络攻击。以下是对网络安全设备探针的详细解释: 定义与功能 定义:网络安全设备探针是一种设备或软件,它通过捕获…

第58期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

短信群发精准营销策略全解析

短信群发作为传统而高效的营销手段,其效果却常因缺乏精准性而大打折扣。要实现短信群发的精准营销,关键在于两大核心要素与选择合适的平台。 一、精准营销的两大核心 1.数据细分,精准定位 在启动短信群发前,企业需…

基于JAVA+SpringBoot+Vue的社区普法平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 社区普法平台旨在为社…

【结构性型模式-适配器模式】

定义 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。 适配器模式分为类适配器模式和对象适配器模式,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结…

道达尔远景首个光储项目圆满收官,助力纺织业绿色转型

近日,由道达尔远景(TEESS)开发、设计、建设并运营的德州夏仁津和纺织分布式光储项目顺利并网发电。通过光伏发电与储能系统的有机结合,不仅满足了纺织厂的用电需求,也为纺织业的绿色转型注入了新动力。 我国是全球最大…

如何使用ParaView可视化工具来绘制点云数据的3D点云图像(亲测好用)

如何使用ParaView来绘制点云数据。以下是如何将你的数据导入ParaView并进行可视化的步骤 一、准备数据 首先,你需要将你的数据转换为ParaView可以读取的格式。ParaView支持多种文件格式,其中最常见的是.vtk和.csv格式。为了简单起见,这里我…

【Gradle】(三)详细聊聊依赖管理:坐标、依赖配置、依赖传递、依赖冲突

文章目录 1.概述2.依赖管理2.1.坐标2.2.依赖的基本概念2.3.依赖配置(Dependency configurations)2.3.1.依赖路径2.3.2.依赖配置与依赖路径的关联 2.4.依赖传递2.4.1.准备工作2.4.2.运行时依赖传递jar包生成与依赖配置依赖树打印使用 Dependency Analyzer…

mybatilsplaus 常用注解

官网地址 baomidou注解配置

数据高效交互丨DolphinDB Redis 插件使用指南

DolphinDB 是一个高性能的分布式数据库。通过 Redis 插件,DolphinDB 用户可以轻松地与 Redis 数据库进行交互。用户不仅可以从 DolphinDB 向 Redis 发送数据,实现高速的数据写入操作;还可以从 Redis 读取数据,将实时数据流集成到 …

关于嵌入式系统中的LED控制程序的一篇爽文

嵌入式系统中的LED控制程序 在嵌入式系统中控制LED是一个很常见的任务,可以用于指示状态、显示信息等。我们将使用C语言编写一个简单的LED控制程序,该程序将控制一个虚拟的LED,但可以根据需要将其扩展到实际的硬件上。 准备工作 在开始之前…

灯塔音乐网,灯塔音乐下载官网

音乐,这个无形的艺术,自古以来就伴随着人类的生活,成为了我们表达情感、沟通思想、寻求共鸣的重要桥梁。在我们的日常生活中,音乐无处不在,它不仅仅是一种娱乐方式,更是一种生活态度,一种精神寄…

从零开始做题:emoji

题目 给出一张图片 解题 from PIL import Image import random # 读取txt文件 with open("rgb.txt", "r") as file: lines file.readlines() # 跳过第一行(包含尺寸信息) lines lines[1:] # 提取RGB颜色值 colors…

职升网:初中毕业如通过什么方式考中专学历?

对于许多初中毕业生而言,想要进一步提升自己的学历,中专是一个不错的选择。考取中专学历需要遵循一定的步骤,以下是具体的指导: 了解中专入学要求: 首先,你需要详细了解不同中专学校的入学要求。这通常包…