ARTICLE DETAIL

资讯详情

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

ADS1.2 “Cannot obtain license”报错排查与完整解决流程

ADS1.2 “Cannot obtain license”报错排查与完整解决流程 说起ADS1.2我相信很多做过ARM嵌入式开发的老工程师都有点复杂的情感。手头还有老项目的代码要靠它维护芯片手册和例程也都是基于这个老工具链写的可每次重装系统或者换台电脑它总要在license上给你来一下“Cannot obtain license”卡得人一点脾气没有。这个问题我从上大学那会儿就见过工作后又在各种新老电脑上踩过不少次今天干脆把这个报错的排查思路和解决流程整个梳理一遍。这篇内容主要写给还在用ADS1.2维护老项目、跑老例程的工程师也写给刚接触这套老工具、被这个弹窗卡住的学生朋友。只要跟着下面的步骤一步步排查大部分情况都能在半小时内解决。1. 先搞清楚这个报错到底在说什么很多朋友一看到“Cannot obtain license”就懵了以为是自己某个操作把软件弄坏了。其实这个报错的意思非常直接ADS1.2在启动或者编译的时候去检查授权信息结果发现找不到合法的授权文件或者找到了但校验不通过。1.1 报错的常见出现时机不同人遇到这个报错场景其实不太一样。我自己总结下来最常见的就这几种刚装完ADS1.2第一次双击图标就弹出这个弹窗。软件明明昨天还用得好好的今天一开机就突然报错。重装了操作系统把ADS1.2也重装了一遍结果license报错。从旧电脑把整个ADS目录拷贝到新电脑上双击运行报这个错。编译某个工程时编译器弹出一个“Cannot obtain license for feature ...”然后编译中止。不管是哪种场景本质上都是授权检查链路断了。区别只在于链路断在哪个环节。下面先把这套老授权机制的逻辑讲清楚然后再对症下药。1.2 老版ADS1.2的授权检查机制ADS1.2虽然是ARM公司当年的官方工具链但它的授权管理方式用的是比较古老的FlexLM机制也叫FLEXlm或FlexNet。FlexLM这套机制在工业软件里非常常见很多CAD、EDA工具、仿真软件都在用。FlexLM机制的核心是几个东西授权文件通常是license.dat里面规定了哪些功能能用、授权给谁、什么时候到期、有没有绑定主机信息。环境变量比如LM_LICENSE_FILE或者ARM_LICENSE用来告诉软件“授权文件放在哪里”。授权服务在Windows里有时会注册成系统服务由授权文件生成一个运行中的服务软件运行时向该服务请求授权。ADS1.2的默认安装路径一般是C:\Program Files\ARM\ADSv1_2。它在安装完成后会通过License Wizard授权向导来配置license信息。配置完成后授权信息会写入系统注册表和环境变量同时在某些情况下还会启动一个FlexLM服务。所以这个报错的基本逻辑就很清晰了ADS1.2在运行时先去查环境变量里指定的授权文件路径找到授权文件后再通过FlexLM机制校验授权是否有效。任何一步出问题最终都会汇总成你眼前这句“Cannot obtain license”。2. 系统环境排查五个最常见的故障点排查这种问题千万别上来就重装软件那样大概率是白费功夫。按照下面的顺序检查系统环境大部分问题都能定位到。2.1 license文件有没有放在正确位置ADS1.2对license文件的位置其实比较宽松它不一定非要放在安装目录下。但它必须满足一个条件环境变量所指的位置必须真实存在这个文件如果没有环境变量那软件的默认搜索路径下必须存在这个文件。常见的默认搜索路径包括C:\Program Files\ARM\ADSv1_2\licensesC:\Program Files\ARM\ADSv1_2\binC:\flexlm如果你手头有license.dat文件先确认它到底存不存在路径对不对。很多时候是用户在某个下载教程里看到“把license.dat放到安装目录”结果下载文件的时候浏览器把它存成了license.dat.txt或者存到了“下载”文件夹里那系统自然找不到。2.2 环境变量到底指到哪了环境变量是FlexLM机制里最关键的一环。ADS1.2运行时会通过一个或者几个环境变量去定位授权文件最典型的是LM_LICENSE_FILE。在Windows环境下这个环境变量有时候是“用户变量”有时候是“系统变量”。比较坑的是如果之前装过一次ADS1.2后来重装系统某些残留的脚本或设置可能会把环境变量指向一个已经不存在的位置然后新的授权配置又没能覆盖它这时候就会出现“明明配置了license还是报错”的情况。检查方法也很简单打开命令提示符输入echo %LM_LICENSE_FILE%如果输出结果为空说明环境变量没设置如果输出的是一个路径那就去看这个路径下有没有license文件。2.3 系统时间不对也会导致校验失败这一点可能很多人没想到。老版本的FlexLM机制在校验授权时会对比当前系统时间和授权文件里的有效期。如果系统时间早于授权文件里设定的生效时间或者晚于过期时间软件都会拒绝加载授权。常见的场景是某些老电脑主板电池没电了每次开机时间都回到2000年这时候运行ADS1.2系统时间还在授权有效期之前就会报“Cannot obtain license”。还有时候是用户自己手动调了系统时间忘了调回来结果软件就罢工了。所以排查这个问题时一定要先看一眼屏幕右下角的时间是不是“当前正确时间”。如果时间不对先把时间校准再重新运行软件。2.4 杀毒软件和防火墙有没有拦截ADS1.2毕竟是十几年前的老软件它的很多组件在新版Windows上会被杀毒软件标记为可疑行为。特别是FlexLM相关的服务和进程有时候会被杀毒软件直接杀掉或者拦截。如果你之前能用突然某一天开始报license错那很有可能是杀毒软件更新病毒库之后把FlexLM服务相关的进程给隔离了。去杀毒软件的隔离区翻一翻很可能会看到类似“LicenseServ.exe”或者“armlmd.exe”之类的东西。Windows自带的安全中心也有可能“犯案”。不排除某些更新补丁会调整安全策略把老软件的服务给禁掉。2.5 安装路径和兼容性设置ADS1.2发布那个年代Windows XP是主流Win7都还没影。现在大家普遍用Win10、Win11老软件在兼容性上多少会有点问题。ADS1.2如果安装到带空格的路径下比如C:\Program Files\ARM\ADSv1_2某些版本的授权校验反而会出问题。有些用户为了解决这个问题直接把ADS1.2装到了C:\ADS或D:\ADS这种没有空格的路径下校验成功率会高很多。另外右键点击ADS1.2的可执行文件在“兼容性”选项卡里把“以兼容模式运行”设为Windows XP SP2或者SP3有时候也能解决莫名其妙的环境问题。不过兼容性设置更多影响的是软件本身能否正常运行对license报错的改善幅度有限这点要有预期。3. 完整解决流程从报错到正常打开前面讲的都是排查点这里给出一套可以直接照着做的完整流程。这套流程我在自己电脑上、公司电脑上、帮朋友远程处理时反复验证过按顺序走完成功率很高。3.1 第一步先备份并清理旧授权配置在动手之前先做个备份。打开命令提示符执行以下命令把当前环境变量值导出成文本echo %LM_LICENSE_FILE% D:\lm_license_backup.txt echo %ARM_LICENSE% D:\lm_license_backup.txt然后把环境变量里的LM_LICENSE_FILE和ARM_LICENSE暂存起来如果后面发现需要恢复方便找回。接着打开系统服务管理窗口按WinR输入services.msc找到和FlexLM、ARM相关的服务比如“FLEXlm License Manager”之类把它停掉。这里要注意如果是正版授权服务停掉后不要删除只是排查时暂时关闭。同时把license文件复制一份到安全的备份文件夹里防止后面修改配置时把原文件弄坏。3.2 第二步放置并核对license文件把你的license.dat文件放到一个干净、无空格的路径下。推荐两种路径C:\flexlm\license.datC:\ARM\license.dat尽量别放在Program Files目录下因为新版Windows对Program Files目录有额外保护老软件去读这个目录下的文件时可能遇到权限问题。放好后用记事本打开license.dat确认文件内容格式正确。一个正常的FlexLM授权文件里面会有类似这样的内容SERVER hostname COMPUTERID 27000 DAEMON adslmd FEATURE ADS adslmd 1.000 01-jan-2020 0 E4F2A3B8C9D0 ...至少要能看到SERVER、DAEMON、FEATURE这三类关键字。如果打开是空的或者全是乱码那说明文件本身有问题光调整路径也救不回来。3.3 第三步设置环境变量这里分两种情况。如果你有系统管理员权限建议设置系统环境变量这样所有用户都能使用。在桌面右键“此电脑”或“我的电脑”选择“属性”进入“高级系统设置”点击“环境变量”在“系统变量”区域点击“新建”变量名LM_LICENSE_FILE 变量值C:\flexlm\license.dat如果系统变量里已经存在LM_LICENSE_FILE那就双击编辑把值改成当前的license文件路径。注意如果原来的值后面还有其他license路径比如指向其他软件授权文件建议用分号在某些配置环境下是分号隔开不要直接覆盖掉否则其他软件可能也会受牵连。设置完点击确定然后重新打开一个命令提示符窗口执行echo %LM_LICENSE_FILE%确认输出结果是你的license文件路径这说明环境变量已经生效。3.4 第四步用授权向导重新指定文件ADS1.2安装目录下有一个授权配置向导路径一般是C:\Program Files\ARM\ADSv1_2\bin\licensewizard.exe双击运行它。向导界面会问你授权文件放在哪里选择“Use license file”或类似选项然后浏览到你放置license.dat的位置。完成向导后可以顺便再检查一下注册表。按下WinR输入regedit定位到HKEY_LOCAL_MACHINE\SOFTWARE\ARM\ADSv1_2查看有没有LicensePath这个键值。如果有确认它指向的路径也是你的license文件路径如果没有可以新建一个字符串值名字叫LicensePath数据填license文件的完整路径。这一步在有些机器上是必要的因为ADS1.2在某些情况下会优先读注册表而不是环境变量。注意修改注册表要谨慎建议先把该分支导出备份一次再动刀。3.5 第五步重开软件验证结果到这里环境变量、license文件路径、注册表都确认过了可以重新启动ADS1.2验证了。双击ADS1.2的图标看看还会不会弹“Cannot obtain license”。如果正常进入IDE了建议立刻打开一个简单工程测试编译一次确保编译阶段也能正常获取授权。有些时候IDE能打开但编译工具链单独走一套授权逻辑照样会报错。编译通过了才算完整解决。4. 常见问题速查与现场实录下面这张表是我整理的最常见的几种情况和对应的处理方向可以对照着快速定位。现象可能原因处理方向启动时报Cannot obtain license环境变量未设置或指向错误检查LM_LICENSE_FILE变量之前能用今天突然报错系统时间不对或授权过期校准系统时间检查有效期重装系统后报错环境变量和注册表配置丢失重新配置环境变量与授权路径杀毒软件报警后报错FlexLM进程被拦截隔离区恢复文件添加白名单编译时报错但IDE能打开子工具链单独查license确认环境变量对所有进程可见Win10/11上装完后一直报错兼容性问题或路径带空格设置兼容模式尝试无空格路径4.1 现场案例一重装操作系统后环境变量丢失之前帮一个同事处理这个问题他重装了Win10系统然后重新安装了ADS1.2结果一打开就报错。他以为是自己安装步骤不对反反复复装了三遍问题依旧。我过去看了一眼首先就查环境变量发现LM_LICENSE_FILE这个变量根本没设置。再查注册表ADSv1_2分支下面也没有LicensePath键值。我就把license.dat放到C:\flexlm目录下然后手动添加环境变量再运行一次授权向导问题立刻解决了。这个案例很典型。重装系统之后所有用户级和系统级的环境变量都回到初始状态ADS1.2安装程序并不会自动帮你把授权配置也写进去。所以只要重装过系统都不要想着“装完软件就能用”必须手动把授权信息重新指一遍。4.2 现场案例二Win10兼容性导致授权服务起不来还有一次是在Win10电脑上license文件和环境变量都已经配好了LM_LICENSE_FILE也指着正确路径但软件还是报错。后来我打开事件查看器在系统日志里发现FlexLM服务启动失败提示服务无法在当前用户权限下运行。这个就是典型的权限和兼容性问题。解决方法是右键点击ADS安装目录下的授权服务程序名字可能是adslmd.exe或者其他FlexLM组件在“兼容性”选项卡里勾选“以兼容模式运行这个程序”选Windows XP Service Pack 3同时勾选“以管理员身份运行此程序”。设置完重新启动电脑再打开ADS1.2就没问题了。Win10系统对老软件的权限管控比XP严格得多很多老工具在Win10下都要靠“管理员身份”才能正常读写授权文件。5. 长期维护建议让老工具安静地陪你更久一次解决“Cannot obtain license”不难难的是不让它三天两头复发。这里分享几点长期维护的经验都是我这些年踩坑踩出来的。5.1 老环境尽量固化到虚拟机上ADS1.2毕竟是那个年代的工具硬要在最新的Win11系统上跑边界情况总是防不胜防。我现在的工作习惯是专门用虚拟机装一个WinXP或者Win7系统把ADS1.2、老的BSP包、老的交叉编译器都装到一起然后再把虚拟机文件整体备份一份。这样做的好处非常明显系统环境完全隔离不会因为日常装其他软件把环境搞乱。虚拟机文件可以随时整体拷贝换电脑不愁。可以用快照功能在ADS1.2环境正常的节点拍一个快照以后不管怎么折腾一键还原。很多朋友觉得虚拟机性能有损耗但对于ADS1.2这种老工具虚拟机性能绰绰有余完全不用担心编译速度问题。5.2 把授权文件和配置信息固化到文档里license文件是软件的生命线一定要做好备份。建议在项目仓库里建一个docs或者tools目录把license文件放进去。同时在README里记录清楚license文件的原始来源。安装到了哪台机器的哪个路径。环境变量是怎么配置的。授权向导的配置流程。这些信息在多人协作或者交接项目时特别重要。很多老项目之所以“传着传着就断了”就是因为这些基础配置只存在某个人的电脑里没有变成文档。等这人离职或者电脑格式化后来接手的人就只能自己摸索。5.3 记住一个原则不要在license问题上乱试我发现有些朋友在报错时喜欢“到处找破解方法”今天改时间明天删注册表后天又装了个不知名的小工具。这种做法风险很大一方面可能把系统环境弄得越来越乱另一方面还可能引入安全风险。正确做法是先按本文的排查顺序走一遍确认环境变量、license文件、系统时间、服务状态这几个核心因素。这些都没问题再考虑兼容性。不要一上来就动注册表、关杀毒软件那样只会让问题变得更复杂。原因很简单这个报错的触发机制就是FlexLM查不到合法授权所有排查都应该围绕“让系统找到并正确校验license”展开方向对了问题就解决了一大半。另外多说一句运维相关的经验ADS1.2用的FlexLM机制是支持多台机器共用授权的在授权协议允许的前提下公司如果有几台电脑需要同时用可以考虑配一个专门的license服务机器然后让其他机器通过环境变量指向服务端。这样比每台电脑拷贝一份license文件更好管理也方便排查问题。不过这属于进阶用法如果你的使用场景很简单一台电脑上跑那直接按本文的流程配置就够了。在我这几年的实际操作里ADS1.2虽然老但稳定可靠很多关键老项目还得靠它维护。只要授权机制理解透了配置思路清晰了它其实很少“闹脾气”。有时候看着那些年轻工程师被这个报错急得团团转我总想说一句老工具不难用难的是你愿不愿意花点时间读一读它的脾气。
返回列表