当前位置:   article > 正文

vitis报错:platform out-of-date,编译时makefile error;修改后application编译报undefined reference_vitis编译报错

vitis编译报错

参考资料:

https://forums.xilinx.com/t5/Embedded-Development-Tools/Drivers-and-Makefiles-problems-in-Vitis-2020-2/td-p/1188742

https://forums.xilinx.com/t5/Embedded-Development-Tools/Vitis-2019-2-LWIP-Echo-Server-Template-Build-Error/td-p/1124509

工作环境:

2020.2vitis

主要内容:

1、platform出现out-of-date问题

2、platform中加入了自定义的ip核,出现makefile error的问题,使用版本一makefile解决问题

3、用版本一的makefile解决platform编译问题后,出现application中undefined reference错误,使用版本二的makefile

(因此若需要改makefile,请根据不同vitis版本进行修改,我的为vitis2020.2使用版本二)

问题1、platform出现out-of-date问题

在我们VIVADO导出硬件平台XSA之后,我们将其添加入vitis的platform project中,这事我们需要查看platform的版本是否out-of-date,若过期则需要进行更新。

若出现out-of-date,直接的办法就是对platform,进行clean project和进行编译build project。一般来说只要编译通过,out-of-data标志就会消失,就可以添加如application project进行编写。

问题2、platform编译不通过,出现makefile error问题

对platform工程进行了多次的clean和build的操作,均提示以下问题:makefile error。一切的问题都指向了Makefile文件。

(下面部分为我自己的解决的艰辛历程,失败告终。最终的解决方案在最后,请自行拖到最后查看)

 网上查阅的可能的解决方案:

1、如赛灵思论坛上说,修改make文件

2、可能是系统的原因,win10会报错。因此在linux上用vitis实现

3、版本不匹配vivado hls2018应更为vitis hls 2020

尝试(打算采用对照法找出问题):

1、师兄提供的vivado直接导出硬件,driver内有对应驱动(见桌面,fuxian),成功!!!!

2、使用最简单的2018生成的hls_color ip,导出硬件。driver内有对应驱动,(桌面,my)报错

3、(my_treshold_vivado文件夹)使用2018生成的hls_color,hls_threshold,导出硬件,driver内有对应驱动(桌面,my)报错。因此不是ip核编写难度问题。

4、使用自己写的重心法ip核,在vivado部分就报黑盒子,报错。

还在排查相关原因。

5、updata文件夹:updata尝试下,使用师兄的vitis工程中,直接更新xsa文件会产生的效果。失败。

更新方法网址:
https://forums.xilinx.com/t5/Design-and-Debug-Techniques-Blog/Step-By-Step-Guide-To-Xilinx-SDK-Project-Migration-To-Vitis/ba-p/1050061

6、找了一个简单的vitis工程,接口两个Stream,中间简单的加减赋值。分别用2020.2vitis hls和2018.3vivado hls导出ip核(my_2018duizaho_vivado:装了2018vivado example核的vivado工程;my_2020vitis_vivado:2020vitis核的vivado工程,里面有+cvt核的xsa      vitis_example核的xsa)将这两个工程的hardware platform导出到vitis中,全部通过。。

该部分为了探究使用不同版本的hls实现,是否是产生问题的原因。

(目前使用对照vivado工程进行验证,第一次采用的程序太简单,没能在vitis内产生driver,两者都通过)

设置的对照组图片

对照实验的结果与总结:

最后以失败告终,主要还是建议vitis hls在装完了vision库之后,调用里面的函数产生driver进行对照能看出效果,由于时间原因,关于vitis hls vision之后在进行尝试。


最终的解决办法:

特别感谢本贴作者,将详细内容均展示出来,感谢!!!

参考文献:https://forums.xilinx.com/t5/Embedded-Development-Tools/Drivers-and-Makefiles-problems-in-Vitis-2020-2/td-p/1188742

原因:

在VIVADO 2020.2中放入了2018.3vivado hls的自定义ip核。在2020中,makefile的内容出现了变化,导致这个ip的Makefile文件在编译时,出现了报错。需要对IP的文件中的Makefile文件进行手动的修改。

解决方法:

赛灵思论坛上varas的方法解决了这个问题,大力感谢。

要确保在平台的三个目录中替换更正的 makefile:

  1. Platform/hw/drivers/<CustomIP_name>/src/Makefile
  2. Platform/ps7_cortex_a9_0/standalone_domain/bsp/ps7_cortex_a9_0/libsrc/<CustomIP_name>/src/Makefile
  3. Platform/zynq_fsbl/zynq_fsbl_bsp/ps7_cortex_a9_0/libsrc/<CustomIP_name>/src/Makefile

另外,根据不同的vitis版本,有两种不同的makefile文件。

版本一:

我只更改了其中的两行:.o的内容出现更改变为下面两行。其他位置如clean部分没有进行改动。

  1. OBJECTS = $(addsuffix .o, $(basename $(wildcard *.c)))
  2. ASSEMBLY_OBJECTS = $(addsuffix .o, $(basename $(wildcard *.S)))

在这三个主要更改之后,您的项目将正确构建并且您的自定义 IP 将正常工作!

下面是所需要的Makefile文件,大家可以对照着原代码进行修改。

  1. COMPILER=
  2. ARCHIVER=
  3. CP=cp
  4. COMPILER_FLAGS=
  5. EXTRA_COMPILER_FLAGS=
  6. LIB=libxil.a
  7. RELEASEDIR=../../../lib
  8. INCLUDEDIR=../../../include
  9. INCLUDES=-I./. -I${INCLUDEDIR}
  10. INCLUDEFILES=*.h
  11. LIBSOURCES=*.c
  12. OBJECTS = $(addsuffix .o, $(basename $(wildcard *.c)))
  13. ASSEMBLY_OBJECTS = $(addsuffix .o, $(basename $(wildcard *.S)))
  14. libs:
  15. echo "<CustomIP_name>..."
  16. $(COMPILER) $(COMPILER_FLAGS) $(EXTRA_COMPILER_FLAGS) $(INCLUDES) $(LIBSOURCES)
  17. $(ARCHIVER) -r ${RELEASEDIR}/${LIB} ${OBJECTS} ${ASSEMBLY_OBJECTS}
  18. make clean
  19. include:
  20. ${CP} $(INCLUDEFILES) $(INCLUDEDIR)
  21. clean:
  22. rm -rf ${OBJECTS} ${ASSEMBLY_OBJECTS}

这个版本的问题:

在后面的application编译时,若不使用新ip核的函数不会出现问题。但是一旦使用新的ip核函数,会报错:

编译小的,报错信息为下面的图1,2

编译大的,报错为:

报错原因如下:

https://forums.xilinx.com/t5/Embedded-Development-Tools/Vitis-2019-2-LWIP-Echo-Server-Template-Build-Error/td-p/1124509

原因大意是:

如果提示缺少的函数已在 BSP 文件中编译,就可以在 .o 文件中看到它们。如果已经正确编译是这样,那么链接器中出现缺失函数错误的唯一原因是:没有链接正确的 libxil.a 文件。

最核心的问题就是makefile文件编写不正确。

因此我的2020.2vitis得使用版本二的makefile(从别的函数的makefile复制而来)还是更改上面提到的三个部分

  1. DRIVER_LIB_VERSION = 1.0
  2. COMPILER=
  3. ARCHIVER=
  4. CP=cp
  5. COMPILER_FLAGS=
  6. EXTRA_COMPILER_FLAGS=
  7. LIB=libxil.a
  8. CC_FLAGS = $(COMPILER_FLAGS)
  9. ECC_FLAGS = $(EXTRA_COMPILER_FLAGS)
  10. RELEASEDIR=../../../lib/
  11. INCLUDEDIR=../../../include/
  12. INCLUDES=-I./. -I$(INCLUDEDIR)
  13. SRCFILES:=$(wildcard *.c)
  14. OBJECTS = $(addprefix $(RELEASEDIR), $(addsuffix .o, $(basename $(wildcard *.c))))
  15. libs: $(OBJECTS)
  16. DEPFILES := $(SRCFILES:%.c=$(RELEASEDIR)%.d)
  17. include $(wildcard $(DEPFILES))
  18. include $(wildcard ../../../../dep.mk)
  19. $(RELEASEDIR)%.o: %.c
  20. ${COMPILER} $(CC_FLAGS) $(ECC_FLAGS) $(INCLUDES) $(DEPENDENCY_FLAGS) $< -o $@
  21. .PHONY: include
  22. include: $(addprefix $(INCLUDEDIR),$(wildcard *.h))
  23. $(INCLUDEDIR)%.h: %.h
  24. $(CP) $< $@
  25. clean:
  26. rm -rf ${OBJECTS}
  27. rm -rf $(DEPFILES)

使用该版本进行编译,platform和application都不报错

no such file

另外若出现更改platform后,重新编译application project发现找不到部分头文件。是因为project链接着原来的platform,需要删除project,新建后,将src复制入。就可以解决。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/490008
推荐阅读
相关标签
  

闽ICP备14008679号