简介:ADSv1.2 是ARM Developer Suite的经典版本,专为开发者在ARM架构上编写、编译与调试嵌入式软件而设计,适合嵌入式入门者、维护老项目的工程师,以及需要了解早期ARM工具链的开发者使用。压缩包共1193个文件,约114.61MB,以htm说明文档、c/cpp源文件、h头文件为主,并包含大量gif操作演示、pdf手册、bat构建脚本、avi教学视频、mcp工程文件及s汇编文件,较为系统地覆盖了编译器、调试器、库文件、头文件、示例代码和文档等组成部分,可支撑从环境安装到项目调试的完整流程。目前已有3700人学习下载,说明其在经典工具链学习中仍具参考价值。资源中还能看到wav、pcm、dat等数据文件以及可执行exe,便于读者结合具体示例理解ARM程序编译、链接与运行方式;不过该版本相对较早,新项目建议搭配ARM Compiler或Keil MDK等现代工具链使用。
1. 拿到ADSv1.2安装包.zip之后:先校验,再双击,顺序别反
“ADSv1.2 安装包.zip”这个文件名我见过太多次了,它在同事的U盘里、部门共享盘里、甚至某些下载站点里出现时,看起来就是一个普通压缩包。多数人拿到后的第一反应是双击、解压、一路 Next,结果不是解压中途报 CRC 错误,就是装完启动提示找不到 license。这篇文章想说的是:ADS 这类大型工具的部署,顺序比技巧重要,校验比安装重要,许可配置比界面点击重要。文章会从拿到安装包开始,讲完整性校验、解压安装、许可配置和排障,适合正要给自己机器装 ADS 的工程师,也适合要给一排机器批量部署的维护者。
2. 装前准备:ADSv1.2 对运行环境的要求与安装包完整性校验
按我这边的执行顺序,拿到 ADSv1.2 安装包.zip 之后,先不着急解压。原因很简单:ADS 的安装包通常体积不小,一次失败的解压可能浪费十几分钟,而安装到一半回滚浪费的就是一小时起步了。下面三个动作只花五分钟,能把后面大部分的坑提前排掉。
2.1 先判断包内形态:标准安装包、解压即用版还是定制部署包
先把 zip 当成一个黑匣子,不要双击解压,先用列出内容的命令看一眼顶层结构。常见的 ADS 安装包有三种形态。第一种是标准安装包,顶层能看到 setup.exe、installer 或 disk1 之类的目录,这种必须运行安装程序;第二种是解压即用版,顶层直接是 bin、lib、plugins 目录,没有 setup,一般是别人在干净机器上装好再压出来的;第三种是带定制脚本的部署包,顶层有 scripts、config 或 *.def 文件,安装时除了释放文件还要执行脚本。三种形态的处理方式完全不同,把第二种当成第一种,你会到处找 setup.exe 并怀疑包坏了;把第三种当成第一种,你可能会漏掉定制步骤,装完行为不对。
tar -tf ADSv1.2_安装包.zip | head -30逻辑说明:-t是列出内容不落地,-f指定文件名,head -30只看前 30 行。这样做的目的是在改动磁盘之前先知道包内结构。如果在 Windows 上不方便用 tar,也可以拿压缩软件打开 zip,只看不释放,效果一样。
参数说明:head 的 30 不是硬性规定;如果顶层目录很多,可以加大到 60。关键是看第一层有哪些目录、有没有 setup 文件。判断形态的另一个用途是确认版本信息:解压即用版里通常有一个 product.info 或 version.def 文件,用文本编辑器打开就能看到内部版本号和构建日期。如果这个文件缺失,或者内容和你预期的 v1.2 对不上,就要谨慎使用。我不会在没有版本信息的包上花时间安装,宁可回去拿原始包。
2.2 用哈希校验代替肉眼检查:传输损坏不该等到解压时才暴露
接下来是校验。zip 自带 CRC 校验,但它的作用有限:zip 的 CRC 只覆盖每个文件的数据区,而且是在解压时才报错。也就是说,如果 U 盘拷贝或者网络传输造成了几 bit 翻转,你会先看着解压进度走一会儿,然后突然弹出 CRC failed,这时候浪费的时间已经收不回来了。更隐蔽的情况是:某些解压工具在遇到 CRC 错误时会直接跳过那个文件继续解压,最终你得到一个看似完整的目录,装到一半才报缺少某个组件,定位成本极高。所以我把哈希校验放在解压之前。
# 计算当前 ADSv1.2 安装包.zip 的 SHA256 哈希 Get-FileHash .\ADSv1.2_安装包.zip -Algorithm SHA256 | Format-List逻辑说明:Get-FileHash是 Windows 自带的命令,-Algorithm指定摘要算法,这里选 SHA256;Format-List是为了让哈希值完整显示,避免默认表格把长字符串截断。拿到哈希后,和发布方给的 SHA256 逐字符比对;如果对方没给哈希,至少可以用同样命令算一下从两个不同渠道拿到的包是否一致。
参数说明:如果机器性能很弱,可以把-Algorithm换成 MD5 加快速度,但 MD5 只适合做文件去重,不适合做完整性校验。Linux 上用同一思路,命令是sha256sum ADSv1.2_安装包.zip,比对输出结果的第一段。如果哈希比对不一致,别再尝试修复,直接重新获取;zip 不像某些压缩包那样能被可靠恢复,强行解压出来的文件即使看起来能用,也可能在某次运行中触发随机错误,这个代价远高于重新下载一次的时间。
2.3 装前体检:系统盘空间、安装路径和杀毒软件三条红线
校验通过后,进入装前体检。我习惯检查三件事。第一,系统盘剩余空间。ADS 安装器会在临时目录生成大量解压文件,峰值空间大约是最终安装目录占用空间的 1.5 到 2 倍。如果最终要装到 1.5GB,系统盘最好有 3GB 以上的可用空间。查询方式很简单:
Get-PSDrive C | Select-Object Used,Free逻辑说明:这条命令读的是 C 盘的已用和剩余空间,单位是字节,自己换算成 GB 即可。如果剩余空间不够,先清理临时目录,或者把 TMP、TEMP 环境变量指到别的盘。还要确认一点:安装包里的许可文件是否已经存在。有些包会把 license 文件放在顶层,有些需要安装后单独配置;包内没有 license 不等于不能装,但要提前想好许可来源,避免装完卡在启动界面。
第二,安装路径只用英文、数字、下划线。中文路径和空格会在后面调用仿真器时引发奇怪错误,具体案例放到第 5 章。第三,杀毒软件的问题。解压和安装过程中,实时监控可能把 ADS 的 dll 当成威胁隔离掉,导致安装完成后启动报错。处理方式是把解压目录和计划安装目录加入排除列表,安装完成后再把排除列表恢复原状。如果环境不允许加白,至少不要在解压时手动扫描压缩包,尽量把安装过程一次跑完。体检做完,再到下一步解压安装。
3. 解压与安装:从 zip 到可用 ADSv1.2 的完整操作流
这一章开始真正动磁盘。前面说过,解压本身不是危险动作,危险的是解压出来的文件不完整、路径不合理、安装方式选错。下面按我的实际操作顺序来写,每步都带可执行命令。
3.1 解压这一步:短路径、分隔目录、别用资源管理器硬解
解压 zip 不是双击就完。最稳的做法是先把 zip 放到一个短路径的目录,比如 D:\src,然后解压到另一个短路径目标,比如 D:\ads_src。为什么不用资源管理器右键解压?因为它对超长路径的容错不太好,zip 里如果有一层深层目录,解压到桌面这种长路径,很容易在安装时出现“系统找不到指定的路径”。ADS 这种大型工具,内部目录层级本来就深,解压目标直接决定安装过程稳不稳。
mkdir -p D:/ads_src tar -xf D:/src/ADSv1.2_安装包.zip -C D:/ads_src逻辑说明:mkdir -p确保目标目录存在,-x是解压,-f指定包文件,-C是进入目标目录后再操作。tar 在 Windows 10 1803 之后是系统组件,Linux 下更是原生的;用它的好处是不依赖图形界面,且不会因为右键菜单的“解压到当前文件夹”把一堆文件糊在同一个目录里。
参数说明:-C一定要写,否则 tar 会把文件解压到当前工作目录,容易污染路径。解压完成后,用dir D:\ads_src或ls D:/ads_src看一层结构,和 2.1 里判断的形态对比一下。如果顶层结构和你预期不符,立即停下排查,不要继续运行里面的 setup。
3.2 安装的两种方式:交互式安装与静默安装二选一
标准安装包的交互式安装没太多技巧,常见步骤是:双击 setup.exe、选择语言、接受协议、选择功能组件、选择安装目录、选择许可证类型,最后开始安装。唯一要提醒的是许可证类型页面,一定要和手里的许可文件匹配,选错类型后面启动必报错。如果你是给自己一台机器安装,交互式没问题;如果要给多台机器部署,我建议用静默安装。
不同版本的安装器支持参数不一样,所以第一步永远是先看帮助:
D:\ads_src\setup.exe -?逻辑说明:这个命令会打印安装器支持的参数列表。有些版本用/?,有些用-h,我习惯三个都试一次,以实际输出为准。不要凭网上记忆猜参数,特别是静默安装这种动作,参数错一个字就可能装出一个残废环境。
常见的静默安装参数大概长这样,注意以你那个实际安装器的帮助为准:
D:\ads_src\setup.exe /silent /accept-license=yes /license-type=node-locked /install-dir=D:\ADS\v1.2逻辑说明:/silent让安装器不弹窗;/accept-license=yes表示接受许可协议;/license-type指定许可类型,node-locked 是节点锁定;/install-dir指定安装目录。如果安装器不支持这些参数,它会直接忽略或者报错,所以务必先看帮助。
参数说明:生产环境批量部署时,最好再加上日志参数,比如/log=D:\ads_src\install.log,具体参数名同样以帮助为准。静默安装不是“点了就跑”,等它退出后要检查退出码;非 0 退出码就是失败,不要看到目录里有文件就以为成功。
3.3 安装完成后的目录检查:缺文件比报错更好定位
安装完成不等于安装成功。很多安装器最后弹了一个 Success,但文件却少了一部分。我习惯先看目录结构,而不是急着重启或双击图标。这一步的常见做法是:
tree /F D:\ADS\v1.2 | head -60逻辑说明:tree /F会递归列出文件,head -60限制输出行数;Linux 下可以用find D:/ADS/v1.2 -maxdepth 2 -type d看目录层级。重点看三处:bin 目录下主程序是否存在、许可工具或 lic 文件是否就位、plugins 或组件目录是否完整。和官方安装手册里的目录结构对比,缺模块比程序不能启动更容易早期发现。
# 扫描安装日志中的错误关键字 Select-String -Path "$env:TEMP\ads_install_*.log" -Pattern "ERROR|FATAL|ROLLBACK"逻辑说明:安装器一般会在临时目录或用户目录写一个安装日志,文件名里通常带 ads_install 前缀,所以我用通配符去匹配。Select-String相当于在文件里搜关键字,命中结果会显示文件和行号,方便定位是哪一步失败。
参数说明:如果日志文件不在%TEMP%,就到安装目录下的 logs 里找,文件名也可能叫 install.log 或 setup.log。找不到日志时,用最笨的办法验证:对比安装目录的总体积和源包解压后的体积,差距超过 10% 就得怀疑有文件没释放。
4. 许可与运行环境:装完不闪退的最后一公里
ADS 装完不启动,十次里有八次是许可问题,不是程序问题。这一章把许可形态、环境变量和首次启动的验证方法一次讲清楚。
4.1 先分清 ADSv1.2 的三种许可形态:节点锁定、浮动许可、评估许可
拿到安装包时,附带的是哪一种许可,装前就要确认。三种形态的配置差异很大,混用的结果就是启动时报错。
| 许可形态 | 适用场景 | 文件/服务形式 | 环境变量典型值 |
|---|---|---|---|
| 节点锁定 Node-locked | 单机长期使用 | license 文件,绑定主机 ID | C:\ADS_lic\ads_v12.lic |
| 浮动许可 Floating | 多用户共享 | license server + 客户端文件 | 27010@license-server |
| 评估许可 Evaluation | 短期试用 | 申请激活码或试用文件 | 安装器自动配置 |
节点锁定最简单:安装时选对类型,启动时指定许可文件路径。浮动许可麻烦在服务端,需要确认服务器端口和主机名能通,不能只配客户端。这里要特别说一句:ADS 的许可文件通常和主机 ID 绑定,如果 lic 文件里的 HOSTID 和你机器对不上,再怎么配环境变量也没用。评估许可一般是安装器自动配置,不需要手动改环境变量。
4.2 配置环境变量与启动器:setx 是用户变量,不是立即生效
配置许可和路径最常见的工具是 setx,但我见过不少人在这一步踩坑:配完在当前终端 echo 能出来,重启 ADS 还是找不到许可,于是怀疑软件坏了。其实 setx 写的是注册表里的用户环境变量,当前进程不刷新,必须新开终端或注销登录后才生效。
# 配置节点锁定许可路径(用户级) setx ADS_LICENSE_FILE "C:\ADS_lic\ads_v12.lic" # 把程序目录加入 PATH,方便命令行启动 setx PATH "D:\ADS\v1.2\bin;%PATH%"逻辑说明:第一行把许可文件路径写入用户环境变量 ADS_LICENSE_FILE;第二行把 ADS 的 bin 目录追加到 PATH 前面。setx的语法是setx 变量名 "变量值",变量值里有空格时才需要引号,但加上引号更稳。
参数说明:如果你用的是浮动许可,第一行应写成setx ADS_LICENSE_FILE "27010@license-server",格式是“端口@主机名”,端口要和服务端 license 守护进程一致。注意:不要用setx PATH去覆盖系统 PATH,一旦覆盖,系统里原本的路径会丢;如果你希望所有用户都能用,优先在系统属性里改系统环境变量,而不是用命令行覆盖。
4.3 第一次启动的冒烟测试:看日志,不要只看图标
环境变量配好,不要急着双击图标。先打开一个终端,从前台启动主程序,这样错误信息会直接打到终端,而不是藏在某个角落的日志里。
D:\ADS\v1.2\bin\ads.exe -console逻辑说明:-console是否支持取决于这个版本,如果不支持,就在普通启动后立刻到日志目录里查。ADS 这类软件的日志目录通常在用户 AppData 或安装目录下,不同构建版本不一样。启动后如果程序秒退,多半是许可路径错误、主机 ID 不匹配、或者系统缺运行库,这三类问题日志里都有明确行。
# 扫描 ADS 日志中的错误关键字 Get-ChildItem "$env:APPDATA\ADSv1.2\logs" -Filter "*.log" -ErrorAction SilentlyContinue | Select-String -Pattern "ERROR|FATAL|license"逻辑说明:Get-ChildItem先找日志目录下的所有 log 文件,-ErrorAction SilentlyContinue让目录不存在时不报错;管道交给Select-String搜索错误关键字。如果找到 license 相关错误,优先检查 ADS_LICENSE_FILE 和主机 ID;如果找到“无法加载 DLL”,优先查杀毒软件隔离区和运行库;如果日志全白,说明启动过程基本过了。
冒烟测试的标准是:程序能打开主界面、能看到菜单,新建一个空工程不报错。这两项过了,安装就已经成功了大半,剩下的是具体功能验证。
5. 翻车记录:ADSv1.2 安装与启动的 6 个高频坑,每条都是现场
这一章是从好几台机器上换来的血泪经验。每条不绕弯子,直接写现象、原因和解决,遇到同款问题可以照着处理。
5.1 解压到一半报 CRC failed:zip 在传输中已经损坏
现象:解压进度停在某个文件上,弹窗提示 CRC failed,setup 文件找不到,解压目录里只留半截文件。原因:U 盘拷贝或网络传输时发生了 bit 翻转,zip 的 CRC 校验在解压时才执行,所以到这一步才暴露。解决:不要在这个 zip 上继续尝试,先重新获取;如果只有这一份,可以用压缩工具打开并勾选“保留损坏文件”抢救文档,但绝不能用来装软件。最稳的做法是重新获取后做 SHA256 比对,两分钟能搞定的事,别赌运气。
5.2 安装到 90% 回滚:临时目录空间不足或被杀软卡住
现象:进度条接近 99%,突然弹窗“安装失败,正在回滚”,安装目录只剩残缺文件。原因:安装器把临时文件写到%TEMP%,C 盘满了,或者临时目录被清理软件锁定,文件写不进去。解决:先运行磁盘清理,再把 TMP、TEMP 环境变量临时指到有空间的盘,重新安装。检查方法很简单:安装前用Get-PSDrive C看剩余空间,低于 2GB 就先清理。回滚日志里通常会写具体是哪个路径写失败,先读日志再动手。
5.3 启动报缺少 dll,安装目录里文件却在:杀毒软件隔离了
现象:首次启动提示“无法加载 XXX.dll”或“应用程序无法正常启动 0xc000007b”,到安装目录看文件还在,但属性里文件大小是 0 或已经被重定向。原因:杀毒软件把安装包里的 dll 判定为可疑文件,实时监控在解压或安装过程中隔离了。解决:先确认安装包来源正当,确认无误后,把解压目录和安装目录加入杀毒软件排除列表,从隔离区恢复被误报的文件,然后运行修复安装。不要在没有确认来源的情况下盲目加白,安全底线不能丢。
5.4 License 环境变量配了却不生效:setx 写的是用户变量
现象:echo %ADS_LICENSE_FILE%能看到路径,但 ADS 启动还是报 “Unable to obtain license”。原因:setx默认写用户环境变量,如果你用管理员权限装服务或计划任务启动,它读的是系统变量;或者 lic 文件确实是坏的,和当前机器 HOSTID 不匹配。解决:打开系统属性,同时检查用户变量和系统变量,把 ADS_LICENSE_FILE 写到系统变量;确认 lic 文件第一行的 HOSTID 和当前机器一致;改完必须注销再登录,不能只开新终端。这条我踩过,新开终端看着变量值是对的,实际服务进程压根没读到。
5.5 多版本 ADS 共存:v1.2 和 v2.0 的环境变量互相打架
现象:装了 v1.2 之后,原来的 v2.0 启动变得奇怪,两个版本都指向同一个 bin 目录,或者启动时提示“版本不匹配”。原因:两个版本安装时都往 PATH 前面加自己的 bin 目录,后装的覆盖了先装的;注册表里的默认路径也可能被改写。解决:安装时取消“添加到 PATH”或选择“仅当前用户使用”,不要让安装器动全局 PATH;手动在桌面建两个快捷方式,分别在快捷方式属性里设置本版本的环境变量。命令行启动需要切换版本时,写一个环境切换脚本,在当前窗口用 set 激活对应版本,而不是改全局变量。
5.6 安装路径带中文或空格:仿真器调用时到处翻车
现象:安装成功、界面正常,但一跑仿真就报 “Cannot create temporary file” 或“无法启动子进程”。原因:ADS 内部要调用外部求解器,路径解析对空格和中文支持不完整,尤其当临时目录在用户名带中文的路径下时问题更明显。这个问题曾经被我当成玄学排查了很久,最后发现就是安装路径里多了一个空格。解决:安装路径只用英文、数字、下划线,临时目录也手动改成纯英文短路径;已经装到中文路径的,别纠结,卸载重装到 D:\ADS\v1.2,比改配置省时间。
6. 值得养成的两个习惯:一键验证安装和配置备份
我后来给自己定了一条规矩:任何一台机器要装 ADSv1.2,装完必须跑一遍验证脚本,过了才算交差。脚本不复杂,检查四件事:关键文件在不在、环境变量值对不对、如果是浮动许可能不能连通服务器、最近日志有没有 ERROR。下面是一个示例,文件路径按实际版本改:
$items = @{ "D:\ADS\v1.2\bin\ads.exe" = "主程序" "D:\ADS\v1.2\lib\ads_core.dll" = "核心库" } foreach ($p in $items.Keys) { if (Test-Path $p) { Write-Host "[OK] $($items[$p])" } else { Write-Host "[FAIL] $($items[$p]) 缺失: $p" } } $lic = [Environment]::GetEnvironmentVariable("ADS_LICENSE_FILE", "User") Write-Host "ADS_LICENSE_FILE=$lic" if ($lic -match "^\d+@") { $port, $server = $lic -split "@" if (Test-NetConnection -ComputerName $server -Port $port -InformationLevel Quiet) { Write-Host "[OK] License 服务可连通" } else { Write-Host "[WARN] License 服务不可达" } }逻辑说明:$items是一个路径到说明文字的映射,Test-Path逐个检查文件是否存在;环境变量读取用[Environment]::GetEnvironmentVariable,比echo %VAR%更可靠,因为它直接读注册表。如果变量值符合端口@服务器的浮动许可格式,再用Test-NetConnection检查网络连通性;节点锁定许可不需要这一项,只检查 lic 文件能否读取。脚本输出里有 FAIL 或 WARN 就要处理,不要拖到第二天。
第二个习惯是配置备份。安装完成后,把安装目录的 bin 目录、许可文件和环境变量导出到一个 backup 目录,重装系统后用这些配置直接恢复。我不止一次遇到过装完三天发现少了某个组件,最后靠备份目录里的文件列表找出安装时漏选了什么。备份不需要整盘复制,只需把 bin、lic、启动器快捷方式和环境变量清单放进一个文件夹,以后排查问题时,这个文件夹就是你的基线。我之前连续两次在同一个地方翻车,都是拿到的 zip 没有校验,解压到一半坏掉,换了一台机器再试才意识到是包本身的问题。后来养成了先哈希再解压、装完就备份的习惯,确实少走了很多弯路。希望帮到你。
本文还有配套的精品资源,点击获取