ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Vivado License报错与更新全流程:从报错识别到环境配置排查

Vivado License报错与更新全流程:从报错识别到环境配置排查 1. License报错长什么样先认准病根再动手前几天调一个图像采集项目板子都连好了综合布局布线跑完正准备生成比特流Vivado直接给我弹了个大红框license check failed。我当时第一反应是授权过期了结果一查离到期还有两个月。后来折腾了半小时才发现是最近换了一张新网卡主机MAC地址变了License文件里绑定的还是老网卡。这类事情在FPGA开发里太常见了尤其是用正版License或者从官网申请的Evaluation License的同学几乎都会踩一遍。先说清楚一个概念Vivado的License机制用的是FlexNet也就是老FPGA工程师嘴里常说的FlexLM。这个体系里License文件不是单纯一个密钥它是一段有格式的授权文本里面记录了授权给谁、哪台机器、哪些Feature、什么时候到期。所以当Vivado运行时报错很多时候不是You have no license而是我有License但你这台机器/这个时间/这个环境不对。搞清楚这一点比盲目重新申请一遍License有用得多。常见的报错有这些ERROR: [Vivado 12-1344] No valid license exists for feature VivadoFatal Error: Vivado License Check Failed. Please run Vivado License ManagerWARNING: [Vivado 12-1017] License check failed with error: Feature is expiredERROR: License checkout timed out. Unable to checkout a license有的同学看到No valid license exists就直接去重装软件这是最划不来的操作。Vivado本体一般没坏坏的是License文件和当前机器对不上。这篇文章就把我从报错到恢复的完整排查和更新流程写一遍包含我在Windows和Linux两个平台下的操作记录以及一些平常文档里不会写明的细节。提示看到License报错先别急着卸载重装。绝大多数情况都是License文件过期、主机标识变化、环境变量指错路径这三类问题按本文流程走一遍基本都能解决。2. 搞懂Vivado的License机制更新时才不会瞎折腾2.1 Node-Locked与Floating License处理思路完全不同Xilinx现在是AMD的License分两大类。一种是Node-Locked License也就是节点锁定授权License文件里写死了你电脑的MAC地址只能在这台机器上用。另一种是Floating License也就是浮动授权License放在一台服务器上局域网内的多台电脑可以共用按并发数控制。这两类的更新操作完全不一样。Node-Locked的要改的是本地License文件只要新文件里绑定的主机标识和当前机器一致放进去就能用。Floating License要改的是服务器上的License文件和License Server配置客户端本身基本不用动最多改一下环境变量指向。我见过不少同事明明用的是Floating License结果更新完把新License文件放进本地然后两边都乱了。怎么判断自己用的是哪种看License文件第一行。如果第一行是SERVER开头说明是浮动License后续还有VENDOR xilinxd之类的内容。如果第一行直接是INCREMENT或者PACKAGE开头没有SERVER行那大概率是Node-Locked License。还有一种情况是开头几行被注释掉的SERVER this_host配合DAEMON这种也偏向浮动或者本地服务模式。2.2 Vivado找License的顺序决定了你改完能不能立即生效Vivado启动时找License的顺序是有优先级的这一点很多人不知道。它首先找XILINXD_LICENSE_FILE环境变量其次找LM_LICENSE_FILE环境变量最后才找默认路径C:\Xilinx\Vivado\2024.1\data\flexlm下的Xilinx.licLinux下是/tools/Xilinx/Vivado/2024.1/data/flexlm/Xilinx.lic。这个顺序非常关键。举个真实例子你的系统里同时存在两个License文件一个旧的放在默认路径里一个更新的放在了自定义目录里并且设置了XILINXD_LICENSE_FILE环境变量。理论上Vivado应该优先读环境变量指向的新文件但由于权限或者注册表残留它先读到了旧文件运行时就报错。所以更新操作不只是换个文件还要确认环境变量、默认路径、注册表里没有旧配置抢跑。Windows下还有一个隐藏入口就是注册表里的HKEY_LOCAL_MACHINE\SOFTWARE\FLEXlm License Manager和HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\FLEXlm License Manager里面可能会有LM_LICENSE_FILE和XILINXD_LICENSE_FILE的字符串值。如果你改了环境变量还是报错大概率是注册表里还留着旧路径。用regedit进去看一眼或者直接用Vivado License Manager的界面统一管理可以避免这个问题。2.3 2035报错和主机标识两个最容易卡住的细节热词里出现频率很高的vivado注册 2035其实是FlexNet的错误码。2035在FlexNet体系里对应的含义是license server system 无法解析主机名或者找不到license server。如果用的是Floating License客户端设置了LM_LICENSE_FILE27000server_ip这种格式而Vivado解析不了这个server地址就会报2035。排查思路很直接先ping一下服务器IP再确认服务器上的License Manager服务是否正常启动最后检查端口是否被防火墙挡了。另一个高频坑是主机标识。Node-Locked License绑定的是MAC地址但Xilinx的License生成页面在申请时会要求你填Host ID填错一位都白搭。而且要注意Windows下查看MAC地址用ipconfig /all但License文件里Host ID的格式一般要求去掉冒号、小写字母、中间不能有空格。很多人填了和网卡物理地址完全一致的字符串结果格式不对License生成后Vivado照样不认。Linux下查看用ifconfig或者ip link同样要去掉冒号。多网卡的机器尤其注意Xilinx的License是基于启动且活跃的网卡来校验的如果你把无线网卡的MAC填进去了但实际用的是有线网卡上网License照样失效。3. License文件更新实操全流程从确认现状到验证生效3.1 更新之前先看清当前License还剩多久很多人说我的License报错了但我问你License什么时候到期答不上来。第一步应该是打开Vivado License Manager在Vivado界面左上角选Help - Manage License...会弹出License Manager窗口。切到View License Status选项卡可以看到当前所有已加载的License包括Product、Version、Expiration。如果这一页能正常显示且日期还没过说明License本身没大问题问题多半出在环境配置上。如果这一页直接显示错误或者空列表那就要准备更新License文件了。另一个方式是在命令行运行lmutil lmdiag或者直接看License文件里的时间字段比如INCREMENT行里的PERMANENT表示永久18-jan-2025这种格式就是到期日期。但文件里的时间只能作为参考真正生效时间还是要看FlexNet服务的解析结果。3.2 获取新License官网申请还是找FAE注意三个关键字段如果是正版授权通常直接找FAE或者公司内部License管理系统拿新文件。如果是试用版去AMD官网的Self Service页面申请Evaluation License。不管哪条路新License拿到手后先别急着放进去用文本编辑器打开检查三样东西Host IDNode-Locked License里INCREMENT行后面的HOSTID字段必须和你当前机器匹配。Feature名称比如Vivado、Vivado_HLS、Vivado_SDK你要用的功能必须有对应的Feature行。时间字段确认是PERMANENT还是expire-date格式。注意不要用记事本打开License文件后直接保存。部分License文件是Unix换行符LF记事本如果以Windows换行符CRLF重新保存会导致FlexNet解析出错。建议直接用VS Code、Notepad或者Vim打开改完保存时保持原格式不变。3.3 放置License文件Windows和Linux的正确姿势Windows下推荐把License文件放到Vivado安装路径下的data\flexlm目录中这样最省心。但我不建议直接覆盖原始Xilinx.lic而是新建一个文件比如Xilinx_2024.lic然后通过环境变量指向它。原因很简单如果以后又更新了一版License你只需要改环境变量指向新文件不用动安装目录降低了误操作的风险。Linux下同理我放在/home/user/flexlm/Xilinx.lic这类用户目录下然后设置环境变量。不建议放在/opt/Xilinx这种系统目录下因为更新Vivado时需要root权限才能动麻烦。具体放法# Linux 环境变量配置建议写入 /home/user/.bashrc 或 /home/user/.profile export XILINXD_LICENSE_FILE/home/user/flexlm/Xilinx.lic export LM_LICENSE_FILE/home/user/flexlm/Xilinx.licrem Windows 环境变量配置在系统属性 - 环境变量里添加 set XILINXD_LICENSE_FILED:\Xilinx_License\Xilinx.lic set LM_LICENSE_FILED:\Xilinx_License\Xilinx.lic两个变量都设置是我个人的习惯。虽然Vivado优先读XILINXD_LICENSE_FILE但某些子工具比如Vivado HLS、Vitis的部分组件会去读LM_LICENSE_FILE两个都指到同一个文件能避免主界面能打开但某个IP核综合时报License错误这种奇葩情况。3.4 在Vivado内完成刷新和验证配置完环境变量后需要重启Vivado才能生效。但比重启更稳妥的做法是在Vivado的Tcl Console里直接强制刷新# 清理已有License lmstat -c $env(XILINXD_LICENSE_FILE) # 或者用Vivado自带的命令查看当前可用的feature report_property [get_projects]其实Vivado的License机制是启动时一次性加载的没有运行中热更新的接口。最靠谱的验证流程是关闭所有Vivado进程包括Vivado、Vitis、XSim相关的后台进程。确认环境变量已经指向新License文件。重新启动Vivado。打开Help - Manage License在View License Status里看是否加载了新文件的授权信息。新建一个最简单的工程比如创建一个空工程添加一个计数器模块跑一下综合确认不再报License错误。我在Windows上踩过一个坑改完环境变量后Vivado图标双击打开还是报错。后来发现是环境变量改了但系统缓存没刷新重启了一下系统或者直接注销重新登录才生效。Linux下也一样改了.bashrc后要记得source ~/.bashrc。3.5 Floating License的更新重点在服务端而不是客户端如果你的License是Floating型客户端上怎么折腾都意义不大。更新操作的重点是License服务端把新License文件放到服务器上的License目录比如/opt/flexlm/licenses/Xilinx.lic。找到License Manager工具的路径通常是/opt/flexlm/bin/lmgrd如果你是Windows服务器可能是C:\FlexLM\lmgrd.exe。重启License服务。Linux下常见做法是先用lmdown停掉老服务再用lmgrd -c license文件 -l 日志文件启动新服务。Windows下在服务管理器里重启FlexNet License Server服务即可。客户端上验证能否连上服务器lmstat -a -c 27000server_ip如果返回的Feature列表里有Vivado相关项说明服务端更新成功客户端那边完全不用动。如果客户端报2035或者连接超时多半是防火墙没有放行27000server_ip里的TCP端口。4. 更新后仍然报错的排查清单4.1 时间日期因素最容易被忽略FlexNet协议本身对时间偏差非常敏感尤其是Floating License场景。客户端和服务器的系统时间差超过一定范围License校验就会失败。这个问题的典型现象是License文件没有过期环境变量没问题主机ID也对但Vivado就是报Feature is expired或者Unable to checkout a license。排查方法在客户机和服务器上分别执行date命令确认系统时间一致。检查时区设置如果服务器是UTC客户端是UTC8就算显示的时间一样实际UTC时间还是差8小时License校验可能按UTC算。如果是NTP同步的环境检查NTP服务是否正常运行。我遇到过服务器NTP停了三天客户端时间正常然后所有客户端都报License过期其实就是服务器时间慢了两分钟。4.2 主机ID不匹配重装网卡和换新电脑后的解药换网卡、换主板、换电脑之后原来的Node-Locked License基本必挂。这也是我文章开头说的那个场景。处理方法有两个方向一是重新申请License。去官网重新走一遍申请流程填入新机器的Host ID拿到新License文件再按照上文流程更新。这种方法最省事。二是如果只是暂时应急可以试试把新网卡的MAC地址改成旧网卡的MAC地址。Windows下可以在设备管理器里找到网卡进入属性 - 高级 - Network Address填入旧MAC。Linux下用macchanger工具。但这个方法只适合测试环境不推荐在生产环境长期使用因为网卡MAC冲突可能引发网络问题。另外某些网卡不支持改MAC就没辙了。4.3 环境变量冲突多版本共存时的重灾区机器上同时装了Vivado 2019.1和2023.2的人非常多License环境变量的冲突也集中在这一类环境里。旧版本的Vivado在某些老项目里还在用新版本又装了两个版本需要的Feature不同License文件格式也可能有差异。常见报错是Your license does not include feature Vivado_2023.2please run Vivado License Manager。我的建议是多版本共存时环境变量统一指向一个包含全部Feature的License文件不要让每个版本各指各的。如果你公司有FlexLM服务器客户端统一指向27000server_ip更省心只要服务器上的License池够大所有版本都能覆盖。4.4 防火墙和杀毒软件拦截隐蔽的幺蛾子Windows下装了360或者某安全卫士有时候会把Vivado的License进程xilinxd.exe或者flexlm.dll当成可疑进程杀掉。结果就是Vivado启动时找不到License服务报错信息看起来像License Server Unreachable。排查时看一眼系统安全中心的隔离记录把Vivado安装目录加入信任区。Linux下也有类似情况某些安全模块会拦截/tmp下的临时license缓存遇到奇怪报错时清一下/tmp目录里的.flexlm缓存文件试试。4.5 问题与解决方案速查表报错或现象可能原因处理方式No valid license exists for feature VivadoLicense文件未加载或Feature缺失检查环境变量指向确认新License包含对应FeatureLicense checkout failed with error: Feature is expired时间偏差或License过期检查系统时间和License到期时间NTP校准ERROR: [Vivado 12-1017] Failed to check out license主机ID不匹配比对Host ID重新申请License或更换网卡Unable to connect to license serverFloating License服务未启动重启lmgrd确认27000端口开放Vivado内License Manager空白环境变量优先级被旧配置抢占检查注册表和默认路径里有没有旧License2035错误服务器解析失败ping服务器确认端口和防火墙设置5. 写在最后的一些操作体会License更新这件事本身不难难的是快速定位到底断在哪一环。我个人现在处理这类问题的顺序很固定先看License Manager里能不能正常显示状态再查环境变量有没有被别的配置干扰然后看时间最后才考虑重新申请License。按这个顺序绝大多数问题都能在两轮以内定位。再分享一个项目上的经验每次更新License之后我会顺手把旧License文件改名成带日期的备份文件比如Xilinx_old_20250401.lic而不是直接删除。这样做的好处是如果新License在高版本Vivado里有问题还能快速切回旧文件配合低版本工作。别小看这一步团队合作时会省很多沟通成本。最后补一个很多人问过的细节Vivado版本升级之后是否需要换新License如果你的License是PERMANENT类型且Feature列表包含新版本的Feature名称通常可以继续用。但如果License里明确指定了版本号比如version2024.1升级到2024.2之后就得联系FAE更新授权了。这一点在官网的License FAQ里写得很隐晦不仔细看很容易忽略。
返回列表