ARTICLE DETAIL

资讯详情

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

IAR Embedded Workbench Linux安装配置与工程迁移实战指南

IAR Embedded Workbench Linux安装配置与工程迁移实战指南 1. 为什么要把IAR搬到Linux一个嵌入式工程师的真实场景IAR Embedded Workbench在嵌入式圈子里几乎是老牌中的老牌但很多工程师一提到IAR就默认它是Windows专属软件。其实IAR官方早就提供了Linux环境适配的下载包把编译、调试、烧录这一整套流程搬到Ubuntu上完全可行。这篇文章从一个入门者的角度把我验证过的安装步骤、许可证配置细节、工程迁移时要注意的点都整理出来给打算在Linux上跑IAR的人一份可以直接照做的参考。先说一个我自己的背景工作中大量工具链都已经迁到了Linux早上打开电脑第一件事就是连远端服务器、跑编译脚本、看自动化测试结果。如果单单为了给某个MCU工程改两行代码就得重新切回Windows一起改的还有路径、环境变量、命令行工具整体效率非常割裂。所以当我在IAR官网下载页里看到有Linux版本的时候第一反应就是把之前那几个STM32工程拿过来试一遍。1.1 官方Linux版的“存在感”比很多人想象中高IAR Embedded Workbench并非只有Windows版。以目前官网在售的IAR Embedded Workbench for Arm为例它同时提供Windows和Linux两种主机平台安装包安装之后得到的是同一套编译器、调试器和工程格式。也就是说在Windows上建立的.eww工作区、.ewp工程文件放到Linux版里可以直接打开、编译绝大多数情况下不需要重写工程配置。官方支持的宿主系统以64位Linux为主像Ubuntu 22.04 LTS这类主流发行版通常是社区里验证最多的环境。除了for Arm面向RISC-V、STM8等架构的版本也有Linux安装包。但这里要特别说明一点版本支持范围会随IAR官方更新变化下载前一定要去官网看目标架构对应的“System Requirements”或“Release Notes”不要凭我这句话就默认所有老版本都支持Linux。1.2 哪些人真正需要这版适配我把适合用Linux版IAR的人群分成三类你可以对照一下自己属于哪一类。第一类是“统一开发环境”的人。平时代码管理、静态检查、自动化构建都在Linux上嵌入式工程如果也能在Linux下编译整个流水线就能串起来。第二类是使用CI/CD的人。很多团队希望每天定时拉取代码、用最新版本编译固件、生成测试报告而真正的编译机器往往是无头的Linux服务器这时候IAR Linux版的命令行工具“IarBuild”就非常关键。第三类是笔记本电脑只装Linux的开发者。尤其是学生或独立开发者不想为了一个IDE去装双系统、折腾虚拟机那么Linux版IAR就成了最直接的选择。如果你是微软系IDE的重度用户或者完全没接触过Linux命令行那建议先花时间熟悉一下apt、tar、chmod这些基础操作否则安装过程中每一步都可能卡住。下面开始进入正题。2. 下载IAR for Linux前先把系统和依赖盘明白很多人安装失败问题根本不出在安装包本身而是前期没有确认系统环境。我在Ubuntu 22.04上实测下来最需要注意的点有三个CPU架构、glibc和图形库依赖、以及磁盘目录规划。2.1 确认主机环境和内核架构IAR的Linux版只提供x86_64架构的二进制包也就是说ARM架构的板子不能拿来当安装主机树莓派这类设备先排除。打开终端执行uname -a如果输出里包含x86_64那架构没问题。接着看发行版版本cat /etc/os-releaseUbuntu 20.04、22.04这两个LTS版本是目前社区验证比较多的如果你用的是更新的24.04或者Debian系问题也不大但遇到界面异常或依赖缺失时优先去查官方Release Notes里列的宿主系统清单。如果公司内网是RHEL/CentOS系安装依赖包时要改成yum或dnf。2.2 能少踩很多坑的依赖包清单IAR Linux版安装包自带运行时但它不是完全静态链接的IDE图形界面依赖一批X11和GTK库。以Ubuntu 22.04为例我建议安装之前先把下面这些包装好sudo apt update sudo apt install -y libx11-6 libxext6 libxrender1 libxtst6 libgtk-3-0 libcanberra-gtk3-module libusb-1.0-0 libncurses5其中libusb-1.0-0很重要后面连接ST-Link、J-Link调试器时IAR的调试驱动要通过它访问USB设备。libcanberra-gtk3-module不是必须但缺少它可能让IDE运行时报警告或按钮声音异常。libncurses5在Ubuntu 22.04仓库里可能已经没了遇到找不到的情况下可以直接装libncurses6代替命令行编译器不依赖这个库主要是部分辅助脚本会用到。还有一个小坑如果系统里同时存在多个GCC版本不要随便把默认gcc换掉。IAR自带编译器不依赖系统GCC但你自己的构建脚本可能会调用gcc做编译后处理保持系统环境干净能少出很多怪问题。2.3 下载时别只看版本号还要看Host支持在IAR官网下载页面选择“Linux”标签下载到的通常是一个.tar.gz压缩包文件名类似IAR-EWARM-版本-Linux.tar.gz。这个包体积不小解压后能占到好几个GB下载前建议用df -h确认/opt所在分区的剩余空间至少10GB以上。注意区分两个概念下载的安装包版本号和安装包内编译器支持的芯片版本号。比如你需要用的芯片是STM32F103C8T6那选一个较新的for Arm版本都能覆盖但如果你手里有一批老项目工程是用IAR for Arm 8.x做的建议先确认新版IAR是否能直接打开旧版工程文件。IAR在这方面的向下兼容做得不错但iOS行业那种“老工程打开没问题”的经验不能直接照搬最好做一次小范围验证再大规模迁移。下载完记得校验一下哈希值避免传输过程中损坏sha256sum IAR-EWARM-版本-Linux.tar.gz把输出和官网给出的SHA256比对一下一致再继续。3. 从解压到跑通IAR在Linux上的安装全过程安装过程本身不复杂但有几个关键细节会影响后续使用。我按照最标准的安装路径走一遍每一步都解释一下为什么这么做。3.1 解压、校验、执行安装脚本先把安装包放到一个路径不含中文且不带空格的目录比如~/downloads。为什么特别提这一点因为后面安装路径、环境变量、工程文件路径一旦出现中文或空格轻则IDE里显示乱码重则IarBuild脚本解析路径时直接报错。解压cd ~/downloads tar -xzf IAR-EWARM-版本-Linux.tar.gz解压后目录里通常会有一个install.sh脚本。建议先看一下它有没有执行权限ls -l install.sh如果没有x权限使用chmod x install.sh补上。然后执行安装sudo ./install.sh安装脚本需要sudo因为默认安装目录是/opt/iarsystems。执行后会先让你阅读并接受许可协议然后选择安装路径。我建议保持默认的/opt/iarsystems后续管理权限清晰也不会和用户目录混在一起。3.2 设置PATH让IarBuild随处可用安装完成后去安装目录看一眼实际的版本目录ls /opt/iarsystems目录名通常是ewarm-版本这种格式。在IAR的bin目录下你才能看到真正的主角。列出可执行文件ls /opt/iarsystems/ewarm-*/bin你会看到类似IarBuild、IarIde、IarLicenseManager这样的可执行文件。我把bin目录加进PATH这样就可以在任意位置直接执行命令echo export PATH/opt/iarsystems/ewarm-版本/bin:$PATH ~/.bashrc source ~/.bashrc路径中的版本替换成实际安装目录名。不要偷懒把ewarm-*这种通配符直接写进.bashrc因为source时不会自动展开后续会让你排查到怀疑人生。3.3 装完先做一次冒烟测试安装完成后不要急着建工程先把工具链基本可用性验证一遍。运行IarBuild --version如果报“command not found”先检查PATH是否写对然后检查文件是否有执行权限。如果出现bash: /opt/iarsystems/...: 无法执行文件通常是架构不匹配或缺少动态库这时用ldd查看它依赖哪些库缺失ldd /opt/iarsystems/ewarm-版本/bin/IarBuildldd会列出所有共享库依赖看到“not found”的库名再回头用apt install补齐对应的依赖包。图形IDE的冒烟测试稍微复杂一点。直接执行IarIde如果是在无桌面的服务器上用SSH操作IDE窗口是弹不出来的如果是本机带图形界面命令执行后几秒内应该出现启动窗口。如果启动一闪而过可以试试加-debug参数或者从终端直接运行这样报错信息会直接打印在终端里方便定位。4. IAR许可证配置与LMS001错误的排查手册安装完了不等于能用许可证这一步卡住的人非常多。尤其是网上搜IAR相关热词时fatal error[LMS001]: license check failed. use the iar license manager to re...这句话出现频率极高。这一节我详细说说许可证机制以及遇到LMS001错误时到底该怎么查。4.1 先弄明白IAR许可证到底是怎么存的IAR的许可证有两种常见形态一种是单机许可证Node-locked license激活后绑定当前电脑的硬件信息许可证文件通常是一个.lic文件另一种是浮动许可证Floating license由公司内部的License Server统一发放客户端需要能通过网络访问到服务器。在Linux下许可证并不是“装好了就自动在里面”。安装完IAR只是把程序文件放到磁盘上真正决定能不能编译的是“许可证文件有没有被正确识别”。IAR的许可管理工具IarLicenseManager就是用来导入和管理这些许可证的。它既是图形界面程序也是排查许可证问题的第一入口。4.2 Linux下激活许可证的正确姿势如果你拿到的是正版单机许可证文件比如license.lic可以这样操作IarLicenseManager打开图形界面后选择导入许可证定位到你的.lic文件确认状态显示为“Valid”或“Active”。如果没有图形环境可以用命令行方式确认许可证是否被识别IarLicenseManager -help不同版本支持的命令行参数有差异看帮助输出即可。这里有一个容易被忽略的权限问题很多用户用sudo安装IAR但编译时用普通用户身份如果许可证文件存放在/opt/iarsystems下普通用户可能没有读取权限导致IDE能启动、编译却报许可证错误。解决方法有两种要么用chmod放宽许可证目录的读取权限要么把许可证文件复制到当前用户的~/.iar或~/.config对应的许可目录下。具体目录以你机器上IarLicenseManager的提示为准。如果你需要的是浮动许可证则要配置能解析到许可证服务器的地址。这个配置一般也在IarLicenseManager里完成或者在环境变量里指定服务器地址。配置完成后用ping和telnet确认网络连通尤其要注意公司防火墙是否放行了License Server对应的端口。4.3 遇到LMS001错误按这条链路一步步查fatal error[LMS001]: license check failed. use the iar license manager to re....这个错误翻译过来就是“许可证校验失败请使用IAR License Manager重新激活许可证”。它不是一个具体到单一原因的报错而是一个“综合失败提示”。我建议按下面这个顺序排查能省掉大量时间排查项操作可能结果系统时间执行date查看时间是否准确时间偏差过大会导致许可证校验失败先用sudo timedatectl set-ntp true同步许可证文件位置在IarLicenseManager里查看当前激活的许可证如果列表为空说明许可证未被导入文件权限执行ls -l查看.lic文件权限普通用户没有读取权限时需要在许可目录里放开权限环境变量执行envgrep -i iar查看相关配置网络连通尝试连接License Server端口连接失败时检查防火墙和服务器状态重启工具修改配置后完全退出IDE再重新打开有些配置不会热加载必须重启才生效完整排查思路是这样的先确认时间和网络再看License是否被管理工具识别最后才考虑文件权限。很多人在第二步就倒下了因为在Windows上装IAR时可能会自动弹许可激活窗口而在Linux上安装脚本不会帮你激活需要手动打开IarLicenseManager。所以拿到安装包后先激活许可证再编译工程这是一个能让你少浪费半天时间的习惯。需要提醒的是许可证问题没有“捷径”。不要尝试去网上找破解补丁或绕过许可证的工具一方面这类文件很多会带恶意代码另一方面也违反授权协议。正确的方式是如果许可证过期了联系IAR官方或代理续期如果是评估试用去官网申请试用License如果是公司浮动License找管理员确认授权和服务器状态。5. 工程创建、编译和命令行集成的适配细节到这里IAR本身已经能跑了许可证也激活了。接下来真正的工作是把工程在Linux下跑起来。这一节讲我实际迁移时遇到最多的几个问题。5.1 直接打开Windows工程时最常撞上的三个问题把Windows上的整个工程目录拷贝到Linux后第一件事是双击.eww工作区文件或者从IarIde里File Open Workspace打开。但这里有三点要提前注意。第一路径大小写问题。Windows文件系统不区分大小写Linux区分。如果你的代码里用#include Driver/inc/Uart.h但磁盘上的实际目录是driver/INC/uart.h在Windows上能过Linux上就会“文件找不到”。解决方法是统一大小写习惯或者提前用find命令检查一下find . -iname *.h | sort第二磁盘盘符和路径分隔符。工程文件里如果用了绝对路径比如C:\Users\xxx\...Linux版打开后这个路径肯定不存在。IAR本身支持相对路径但老工程往往存的是绝对路径。处理办法是在IarIde里把工程选项中的Include路径改成相对路径或者把工程统一放到一个固定目录下避免频繁更换位置。第三行尾符和编码。Windows工程里的源文件可能是CRLF换行中文注释可能是GBK编码。Linux下IAR的编辑器打开后CRLF通常能正常显示但GBK注释会变成乱码。这个不影响编译但会让人分心。建议用file命令检查编码用iconv批量转成UTF-8file xxx.c iconv -f GBK -t UTF-8 xxx.c -o xxx_utf8.c转换之前先备份别把源码改坏。5.2 新建STM32/STM8工程时这几个选项别弄错如果你不是迁移老工程而是从零开始新建一个STM32F103C8T6或STM8S工程有几个关键选项需要格外注意。创建工程后进入Project Options第一件事是General Options Target里选择目标器件。以STM32F103C8T6为例选择STM32F103x8系列后IAR会自动关联对应的CMSIS头文件、启动文件、链接配置文件。很多新手在这里只选芯片型号却忘了检查Library配置。如果用的是标准外设库要确保Library选项选对版本如果用了HAL库则要注意HAL库的时基和FreeRTOS的SysTick配置不能冲突。链接配置是一个很大的坑。IAR使用.icf链接文件描述Flash和RAM的布局在IAR安装目录的arm/config/linker下会有很多现成的.icf文件。新建工程时器件选对IDE一般会自动帮你选好对应的.icf但如果你复制了一个旧工程链接文件还指向上一个芯片的位置轻则编译后代码超过Flash范围重则烧录后跑不起来。建议打开Options Linker Config确认一下链接文件路径。还有一个高频问题宏定义。很多芯片厂商的库代码会依赖STM32F103xB这种宏来区分不同型号进而选择不同的头文件和中断向量。如果编译报“找不到stm32f1xx.h”很可能就是宏定义没有加上。在Options C/C Compiler Preprocessor里把需要的宏写进Defined symbols例如STM32F103xB。这个看起来不起眼却是我帮别人排查时间最长的一个问题。5.3 用IarBuild做命令行编译与自动化图形IDE适合交互式开发但如果你有自动编译、固件归档、持续集成需求命令行工具IarBuild才是主角。它和Windows下的IarBuild.exe用法几乎一样基本命令是IarBuild project.ewp -build Debug -log all-build后面跟的是配置名通常是Debug或Release。-log all会把完整编译日志打出来方便在CI里截取错误信息。编译完成后输出文件会在工程的Debug/Exe目录下通常是.hex、.bin或.out文件。如果需要每次编译前先清理加上-clean参数IarBuild project.ewp -clean Debug -build Debug -log all自己写自动化脚本时要注意返回值。IarBuild编译成功返回0失败返回非0在Shell脚本里直接用$?判断即可。这个特性非常有用我可以把“拉代码-编译-打包固件-上传到内部服务器”整条流水线写成一段不到20行的Shell脚本每天都自动跑一遍。6. ST-Link/J-Link烧录调试让硬件在Linux下认账编译通过只是第一步嵌入式开发离不开烧录和调试。在Linux下IAR与调试器之间还需要做一层USB权限适配很多人的“第一次成功烧录”就卡在这里。6.1 给调试器的USB设备配置udev权限在Linux下访问USB调试器比如ST-Link、J-Link必须要有对应设备的访问权限。默认情况下只有root用户能直接访问普通用户会看到类似“Failed to connect to ST-LINK”的错误。解决方法是添加udev规则。以ST-Link为例创建规则文件sudo nano /etc/udev/rules.d/99-stlink.rules写入SUBSYSTEMusb, ATTR{idVendor}0483, ATTR{idProduct}3748, MODE0666不同型号的ST-Link其idVendor和idProduct可能不同比如ST-Link/V2的设备ID是0483:3748。写入后重新加载规则sudo udevadm control --reload-rules sudo udevadm trigger然后把当前用户加到plugdev组方便后续访问USB设备sudo usermod -aG plugdev $USER这里有一个注意点添加完组和规则后需要重新登录一次终端当前会话的组权限不会立即生效。如果你连接的是J-LinkSEGGER官方的Linux驱动包里通常自带udev规则安装脚本直接安装驱动后再接调试器即可。6.2 C-SPY调试器驱动的选择与烧录验证IAR的调试器后端叫C-SPY在Project Options Debugger里选择驱动。不同调试器对应不同驱动ST-LINK对应选择“ST-LINK”J-Link对应选择“J-LINK/J-TRACE”。里面还有一个Use command line选项可以做自动化烧录。第一次连接时我建议先在IDE里用最简单的“Download and Debug”流程验证环境和硬件是否正常。点下调试按钮后观察IDE底部的Log窗口直到出现类似“Flash load: finished”或“Download successful”的提示。这时候再停下来逐步设置断点。如果下载时报错先检查USB线缆和调试器指示灯很多时候并不是软件问题而是调试器没供电。一个常见的问题是固件已经烧录到Flash里但程序不运行。这通常和“复位方式”有关。在Options Debugger Setup里把Reset模式改成“Hardware Reset”或“Automatic”一般能解决。另一个是“No target connected”先拔掉调试器重新插再检查udev规则是否生效。烧录验证通过后还可以用命令行方式做批量烧录。在IarIde的工程选项里配置好驱动然后在Shell里调用IarBuild构建再调用IarIDebugger或其他烧录工具完成下载。不过这个配置过程比较依赖具体工程我建议先把IDE里的手动流程跑通再考虑自动化。7. 老版本IAR、老器件和FreeRTOS移植的补充最后聊两个热门搜索词老版本IAR、FreeRTOS移植。这两个问题看似和“Linux安装”关系不大但恰恰是很多人安装完Linux版之后会遇到的真实困惑。7.1 IAR 6.3/8051这类老工具链的存量工程怎么办网上关于“IAR 6.3 8051开发环境”和“CC2530 IAR”的搜索量一直很高因为CC2530这类8051内核芯片在物联网、ZigBee项目里还有大量存量设备。但很遗憾IAR官方目前没有推出8051架构的Linux版IAR for 8051基本还是Windows为主。你在Linux上装好IAR for Arm也编译不了CC2530的工程这不是配置问题而是工具链本身不支持。对于这类老工程我的建议是分三步走第一如果只是偶尔改代码保留一台Windows机器或Windows虚拟机专门跑老IAR第二如果有计划做工具链统一考虑把8051项目迁移到其他编译器工具链但这涉及大量外设寄存器访问代码的重写成本不低第三长期项目规划时新设计尽量选有Linux支持的MCU架构或IAR版本。不要试图用IAR for Arm的Linux版去编译8051代码工具链之间的差异远比你想象的大。另外提一句有些人在Linux下解压IAR相关压缩包后看到乱码文件名这通常不是IAR的问题而是压缩包里的文件名使用了中文编码Linux默认UTF-8解压后显示异常。遇到这种情况可以用ls加编码选项查询或者用python3的zipfile模块指定编码方式解压。当然更省心的办法是压缩包文件名用英文或拼音。7.2 FreeRTOS移植时与IAR环境相关的几个点关于FreeRTOS热搜词里有一条“FreeRTOS学习篇一: STM32F103C8T6下的移植”说明很多人在做STM32F103C8T6的FreeRTOS移植。在Linux版IAR下做这件事看起来和Windows版不同但编译层面的注意事项其实是共通的这里只说最容易被卡住的三点。第一选择正确的FreeRTOS port层文件。IAR编译器在Arm Cortex-M3上使用portable/IAR/ARM_CM3目录下的port.c和portmacro.h不是GCC版的GCC/ARM_CM3。很多人从网上下载一个例子里面用的是GCC port文件拿到IAR里编译报一堆“无法打开portmacro.h”就是因为port层选错了。第二启动文件和系统时钟配置。FreeRTOS要求系统提供一个周期性的tick中断通常是SysTick。如果你的工程里把SysTick用作了其他用途比如HAL库的时基那就必须把HAL库的时基改成另一个定时器否则两个功能抢一个中断源系统跑起来会异常。第三堆栈和内存配置。FreeRTOS的任务栈是从堆里分配的而IAR工程里堆大小由.icf链接文件控制通常由HEAP_SIZE或类似符号定义。如果在xTaskCreate时返回pdFAIL优先去检查.icf里的堆配置是否够大。F103C8T6只有20KB RAM一个简单的串口任务加一个LED任务建议至少给FreeRTOS堆分配4KB以上同时注意别把RAM耗尽导致链接失败。这三条同样适用于Linux版IAR因为编译器还是同一个只是在Linux下你更容易用命令行日志看清问题所在。比如链接阶段的内存溢出报表用IarBuild -log all就能看到完整的unused和used信息比在IDE里慢慢翻窗口要高效得多。我在实际使用中发现Linux版IAR最大的价值不是让你在IDE里点按钮更顺滑而是让嵌入式工程真正融入了我现有的命令行工作流。把这一套跑通之后日常改代码、提交、编译、烧录整个闭环都变得非常直接。如果你正在从Windows往Linux迁移建议先把许可证激活放在第一步再去做工程编译这个顺序能帮你省下大量排错时间。最后再分享一个小习惯安装完IAR后立刻把当前系统镜像或快照做一份之后哪怕把licenses目录弄乱、把库依赖搞坏也能快速恢复到干净环境成本远低于重新安装。
返回列表