Ubuntu 22.04安装Vivado 2020.1全攻略:解决依赖冲突与配置优化
1. 项目概述与背景最近在折腾一个基于Zynq的嵌入式视觉项目手头的硬件平台比较老配套的软件版本锁定在了Vivado 2020.1。我的主力开发机已经升级到了Ubuntu 22.04 LTS这个组合在网上搜教程时发现踩坑的兄弟特别多。主要问题集中在Ubuntu 22.04默认的库版本太高而Vivado 2020.1这个“老同志”依赖不少已经过时甚至被废弃的32位库直接安装大概率会卡在依赖报错上比如经典的libncurses5、libtinfo5缺失。这活儿本质上是个“新瓶装旧酒”的系统适配工程目标就是在全新的Ubuntu 22.04系统上让一套四年前的EDA工具链稳定跑起来。这不仅对做FPGA和嵌入式开发的朋友是刚需对于需要复现旧项目、维护老代码库的工程师来说也是一个绕不开的实操环节。接下来我就把这次从下载、安装、破解依赖到最终成功运行Vitis的完整过程以及中间趟过的所有坑详细拆解一遍。2. 安装前的关键准备与避坑指南2.1 资源获取与版本确认第一步不是急着双击安装包而是把需要的物料备齐。Vivado 2020.1的安装文件需要去Xilinx官网的存档页面查找。这里有个小技巧直接搜索“Xilinx Download Archive”就能找到入口。下载时通常选择“Vivado HLx”版本它包含了Vivado设计套件和Vitis统一软件平台。文件体积巨大通常是一个20GB左右的tar.gz压缩包比如Xilinx_Vivado_2020.1_0602_1208.tar.gz。务必核对MD5或SHA256校验和确保文件在漫长的下载过程中没有损坏否则安装到一半报错会让人崩溃。另一个至关重要的文件是License许可证。没有它Vivado只能工作在WebPack免费模式支持部分器件或者根本无法启动。License一般通过Xilinx账号申请或从正版渠道获取文件通常是一个.lic文本文件。你需要提前知道自己的网卡MAC地址物理地址因为License是绑定硬件的。在Ubuntu终端里用ifconfig或ip addr show命令就能查到。2.2 系统环境与依赖库的预先处理这是整个安装过程中最容易翻车的地方。Ubuntu 22.04默认只安装了64位的库且软件源里移除了很多老的32位库。但Vivado 2020.1的安装程序和一些底层工具尤其是installer和hw_server是32位的这就产生了尖锐的矛盾。核心解决方案是手动安装缺失的32位兼容库。不要尝试从网上下载乱七八糟的.deb包最安全的方法是启用Ubuntu的multiverse仓库并直接安装。首先打开软件源配置sudo sed -i /^# deb.*multiverse/ s/^# // /etc/apt/sources.list sudo apt update然后安装下面这一组关键的32位库这是经过实测能解决大部分2020.1版本安装和启动问题的组合sudo apt install libncurses5:i386 libtinfo5:i386 libncurses5-dev:i386 zlib1g:i386 libssl1.1:i386 libssl-dev:i386 libgtk2.0-0:i386 dpkg-dev:i386注意这里特意指定了libssl1.1:i386。因为Ubuntu 22.04默认的libssl3不兼容必须安装旧版。如果源里没有可能需要从Ubuntu 20.04的仓库手动下载deb包安装这是一个常见的深坑。此外还需要安装一些通用的构建工具和依赖sudo apt install build-essential libtool automake autoconf pkg-config libusb-1.0-0-dev libusb-1.0-0 libftdi1-2 libftdi1-dev libc6:i386libc6:i386是32位程序运行的基础环境务必装上。重要提示安装完32位库后建议运行sudo ldconfig更新一下动态链接库缓存。有时候安装程序找不到库就是因为缓存没更新。3. 详细安装步骤与配置解析3.1 解压与运行安装程序将下载好的巨型压缩包放到一个空间充足的目录比如/opt或者你的家目录下。然后解压tar -xvf Xilinx_Vivado_2020.1_0602_1208.tar.gz解压后会生成一个包含安装程序的目录。进入该目录给安装脚本赋予执行权限并运行cd Xilinx_Vivado_2020.1_0602_1208 sudo chmod x xsetup sudo ./xsetup这里使用sudo是为了让安装程序有权限向/opt或/tools这类系统目录写入文件。如果你计划安装到用户家目录理论上可以不使用sudo但可能会遇到一些权限问题保险起见还是用。图形化安装界面启动后跟随向导操作欢迎界面直接点击“Next”。同意许可协议必须勾选“I Agree”三个选项才能继续。选择安装版本这里有两个关键选择。Vivado HL System Edition这是最全的版本包含所有功能。如果你有有效的License文件就选这个。Vivado HL WebPACK这是免费版本支持Kintex-7、Artix-7等系列的部分器件。如果你的项目用的是这些器件且没有License就选它。注意WebPACK版也包含Vitis。选择安装组件这是影响安装体积的关键步骤。务必勾选“Vitis”用于嵌入式软件开发。其他如“DocNav”文档导航可选。器件支持Device方面千万不要无脑点“Select All”那会下载超过100GB的数据。根据你的实际硬件平台选择比如只选“Zynq-7000”和“7 Series”。这能为你节省大量磁盘空间和安装时间。选择安装路径默认是/tools/Xilinx。你可以保持默认也可以改成/opt/Xilinx或家目录下的某个路径。记住这个路径后面配置环境变量要用。安装信息摘要确认无误后点击“Install”开始安装。这个过程非常漫长取决于你选择的组件可能需要数小时。可以去喝杯咖啡了。3.2 License配置与环境变量设置安装完成后先别急着启动。配置License是让软件正常工作的关键。将你的.lic许可证文件拷贝到一个固定位置例如/opt/Xilinx/Vivado/2020.1/目录下或者你的家目录。然后需要设置环境变量指向它。打开你的Shell配置文件如果是bash编辑~/.bashrc如果是zsh编辑~/.zshrc。在文件末尾添加以下行# Xilinx Vivado Vitis 2020.1 Settings export VIVADO_PATH/tools/Xilinx/Vivado/2020.1 export VITIS_PATH/tools/Xilinx/Vitis/2020.1 # Source the settings scripts source $VIVADO_PATH/settings64.sh source $VITIS_PATH/settings64.sh # License file location export LM_LICENSE_FILE/path/to/your/Xilinx.lic注意/tools/Xilinx需要替换为你实际的安装路径。settings64.sh脚本会设置PATH、LD_LIBRARY_PATH等一堆必要的环境变量。保存文件后执行source ~/.bashrc或~/.zshrc让配置立即生效。随后在终端输入vivado或vitis应该就能启动对应的图形界面了。实操心得不建议把Vivado的bin目录直接加到PATH最前面因为它的工具链如gcc、make版本可能和系统冲突。通过source settings64.sh的方式更干净它只在当前Shell或终端会话中生效不影响系统全局环境。4. 安装后验证与常见问题攻坚4.1 基础功能启动测试首先测试Vivado能否正常启动。在终端输入vivado如果出现Vivado的图形化界面并且没有关于License的红色错误弹窗说明核心安装成功。可以尝试创建一个简单的工程综合一个计数器逻辑看是否能顺利生成比特流。接着测试Vitis。在终端输入vitisVitis启动后尝试创建一个简单的“Hello World”应用。选择“Create Application Project”目标硬件选择你安装时支持的器件例如xc7z020clg400-1在“Templates”里选择“Hello World”。如果能成功编译并生成elf文件说明Vitis的嵌入式开发环境也配置正确了。4.2 高频疑难杂症与解决方案实录即使按照上述步骤你也可能遇到一些怪问题。下面是我踩过或收集到的坑及其填法问题1启动Vivado时报错error while loading shared libraries: libncurses.so.5: cannot open shared object file原因这是最经典的32位库缺失问题。虽然我们安装了libncurses5:i386但有些安装程序或工具会寻找特定的.so.5文件。解决首先确认库已安装dpkg -l | grep libncurses5。如果已安装可能是符号链接问题。尝试手动创建链接sudo ln -s /lib/i386-linux-gnu/libncurses.so.5.9 /lib/i386-linux-gnu/libncurses.so.5 sudo ln -s /lib/i386-linux-gnu/libtinfo.so.5.9 /lib/i386-linux-gnu/libtinfo.so.5路径中的5.9版本号可能不同请用ls /lib/i386-linux-gnu/libncurses*查看实际版本。问题2Vitis中编译工程时报错make: g: Command not found或arm-xilinx-eabi-gcc: not found原因Vitis的嵌入式开发工具链没有正确安装或环境变量未生效。解决首先检查$VITIS_PATH环境变量是否正确指向了2020.1的Vitis目录。然后手动定位工具链。它通常位于类似$VITIS_PATH/gnu/aarch32/lin/gcc-arm-linux-gnueabi/bin的路径下。将该路径临时加入PATH测试export PATH$VITIS_PATH/gnu/aarch32/lin/gcc-arm-linux-gnueabi/bin:$PATH which arm-xilinx-eabi-gcc如果能找到说明工具链存在问题在于settings64.sh没有正确设置。可以检查该脚本内容或者直接在.bashrc中手动添加工具链路径。问题3硬件管理器Hardware Manager无法识别下载器如Digilent JTAG-HS3原因USB驱动权限问题或者Digilent的电缆驱动未安装。解决权限问题创建udev规则。创建一个文件例如/etc/udev/rules.d/99-xilinx-digilent-usb.rules内容如下# Digilent JTAG SUBSYSTEMusb, ATTR{idVendor}0403, ATTR{idProduct}6010, MODE0666 SUBSYSTEMusb, ATTR{idVendor}0403, ATTR{idProduct}6014, MODE0666 # Xilinx Cable SUBSYSTEMusb, ATTR{idVendor}03fd, ATTR{idProduct}0008, MODE0666 SUBSYSTEMusb, ATTR{idVendor}03fd, ATTR{idProduct}0007, MODE0666保存后运行sudo udevadm control --reload-rules sudo udevadm trigger然后重新插拔下载器。驱动问题Vivado 2020.1自带的install_drivers脚本可能不兼容Ubuntu 22.04。可以尝试从Digilent官网下载最新的Adept Runtime Utilities for Linux安装它包含了驱动。问题4安装或启动过程中出现与libssl或libcrypto相关的错误原因Ubuntu 22.04的OpenSSL版本是3.x而Vivado 2020.1依赖1.1.x。解决这是最棘手的问题之一。除了之前提到的安装libssl1.1:i386有时还需要设置一个软链接来“欺骗”程序。找到系统32位库目录通常是/lib/i386-linux-gnu查看是否有libssl.so.1.1。如果没有你需要从Ubuntu 20.04的包中提取。如果已有可以尝试sudo ln -s /lib/i386-linux-gnu/libssl.so.1.1 /lib/i386-linux-gnu/libssl.so sudo ln -s /lib/i386-linux-gnu/libcrypto.so.1.1 /lib/i386-linux-gnu/libcrypto.so注意这种方法有风险可能会影响其他依赖新版本libssl的软件。最好是在一个独立的开发环境中操作。5. 工程管理与工作流优化建议5.1 项目目录结构规划在Ubuntu上使用Vivado/Vitis一个清晰的项目目录结构能极大提升效率。我建议采用如下结构My_Zynq_Project/ ├── hw/ # 硬件工程 │ ├── vivado/ # Vivado项目文件 (.xpr, .srcs等) │ ├── constraints/ # XDC约束文件 │ ├── ip/ # 自定义IP仓库 │ └── exports/ # 导出的硬件平台文件 (.xsa) ├── sw/ # 软件工程 │ ├── vitis_workspace/ # Vitis工作空间 │ ├── app_src/ # 应用程序源码 │ ├── bsp/ # 板级支持包 │ └── boot/ # 启动文件 (BOOT.BIN, image.ub) ├── scripts/ # 自动化脚本 (Tcl, Python) └── doc/ # 文档将硬件导出的.xsa文件放在hw/exports/在Vitis中创建平台工程时直接指向它软件应用工程再基于此平台创建。这样硬件和软件分离版本管理如Git也更容易处理可以忽略Vivado生成的大量临时文件。5.2 使用Tcl脚本进行自动化图形界面点击适合探索但重复性工作一定要脚本化。Vivado和Vitis都支持Tcl脚本。你可以记录在GUI中的操作生成基础的Tcl命令Vivado菜单栏Tools - Xilinx Tcl Store... 或直接使用write_project_tcl命令然后修改和丰富它。一个简单的自动化构建脚本示例 (build_hw.tcl)# 设置项目参数 set project_name my_project set board_part digilentinc.com:zybo-z7-20:part0:1.0 set target_lang verilog # 创建项目 create_project $project_name ./$project_name -part xc7z020clg400-1 -force set_property board_part $board_part [current_project] # 添加源文件 add_files [glob ./src/*.v] add_files [glob ./ip/*.xci] # 添加约束文件 add_files -fileset constrs_1 [glob ./constraints/*.xdc] # 设置综合与实现策略 set_property strategy Vivado Synthesis Defaults [get_runs synth_1] set_property strategy Vivado Implementation Defaults [get_runs impl_1] # 启动综合、实现、生成比特流 launch_runs synth_1 -jobs 4 wait_on_run synth_1 launch_runs impl_1 -jobs 4 wait_on_run impl_1 launch_runs impl_1 -to_step write_bitstream -jobs 4 wait_on_run impl_1 # 导出硬件平台 write_hw_platform -fixed -include_bit -force -file ./export/${project_name}.xsa然后在终端运行vivado -mode batch -source build_hw.tcl -notrace。这可以实现无人值守的硬件构建非常适合持续集成或夜间构建。5.3 版本控制策略千万不要把整个Vivado工程目录都塞进Git这会产生巨量的二进制和临时文件。必须创建一个详细的.gitignore文件。一个基础的Vivado.gitignore可以参考# Vivado *.jou *.log *.str *.xpr *.xml *.html *.zip .cache/ .hw/ .ip_user_files/ .sim/ .sdk/ .vitis/ .xil/ *.bit *.bin *.mcs *.prm *.xsa *.hdf *.sysdef # 但需要保留这些 !*.xci # IP核配置文件 !*.xdc # 约束文件将设计源码Verilog/VHDL、约束文件XDC、IP配置文件XCI、Tcl脚本和文档纳入版本控制而让Vivado在每次克隆后重新生成工程文件。这样仓库既干净又能在任何机器上复现。6. 性能调优与系统资源管理6.1 提升综合与实现速度Vivado的综合和布局布线是计算密集型任务在Ubuntu上可以充分利用多核CPU和大内存。调整运行策略在Settings - Synthesis和Settings - Implementation中可以修改“tcl.pre”和“tcl.post”脚本或者直接选择高性能策略如Performance_Explore。但注意高性能策略可能消耗更多时间和内存。增加并行作业数在“Tools - Settings - Project Settings - General”中增加“number of jobs”数量通常设置为CPU核心数。在Tcl脚本中使用-jobs参数如launch_runs impl_1 -jobs 8。使用增量编译对于小型修改可以启用增量综合和增量实现这能大幅缩短后续编译时间。在实现运行impl_1上右键选择“Implementaion Settings”勾选“Incremental compile”。内存与Swap确保系统有足够的物理内存16GB是起步32GB更佳。如果内存不足Vivado会大量使用Swap导致速度急剧下降。可以考虑增加Swap空间大小或者使用更快的NVMe SSD作为Swap分区。6.2 解决图形界面卡顿问题在Ubuntu 22.04的GNOME或Wayland环境下有时Vivado的界面会反应迟缓。可以尝试以下方法使用X11会话在登录时选择“Ubuntu on Xorg”而不是默认的Wayland。Wayland对某些旧版Java GUI应用的支持可能不佳。修改Vivado启动脚本找到Vivado安装目录下的vivado脚本通常是一个包装器在启动Java的命令行中添加-Dsun.java2d.opengltrue参数开启OpenGL加速。但注意这取决于你的显卡驱动。调整Java运行时参数编辑Vivado安装目录下的vivado.ini或vitis.ini文件如果存在调整Java堆内存大小例如-Xmx8g设置最大堆内存为8GB避免因内存不足导致的频繁GC卡顿。6.3 磁盘空间清理Vivado项目动辄占用几十GB空间。定期清理可以释放大量磁盘空间删除旧的运行记录在Vivado中File - Project - Archive Project可以打包项目但更直接的是手动删除项目目录下的.runs目录里面包含综合和实现的中间文件以及.cache、.hw、.ip_user_files等目录。注意删除.runs后之前的实现结果将无法直接打开需要重新运行。清理IP核缓存所有项目的IP核默认会编译到~/.Xilinx/Vivado/下的IP缓存目录。可以定期清理Vivado会在下次需要时重新编译。使用vivado -mode batch进行清理可以编写Tcl脚本在批处理模式下删除不需要的运行和报告。经过以上这一整套从系统准备、安装部署、问题排查到工作流优化的流程你应该能在Ubuntu 22.04上建立起一个稳定可用的Vivado 2020.1和Vitis开发环境。这套组合虽然老但对于许多现有的工业和学术项目而言依然是不可或缺的基石。关键在于理解新旧系统之间的兼容性矛盾并耐心地逐一解决依赖问题。一旦环境配通后续的开发工作就会顺畅很多。