Linux平台CCS安装配置完整示例兄弟们折腾Linux版的Code Composer Studio以下简称CCS真不是一件轻松事儿。记得我第一次在Ubuntu上装CCS光是把环境跑起来就花了一个下午不是缺库就是识别不到仿真器气得差点摔鼠标。后来琢磨明白各个版本之间依赖关系和驱动规则之后才发现其实核心就是那几步。这篇记录我就把CCS在Linux下的安装配置从零到能烧录的完整过程写清楚给准备入坑和正在入坑的朋友当个参考。内容围绕Linux下的CCS安装配置展开覆盖依赖库处理、脚本安装、调试器驱动、常见报错等关键点适合嵌入式开发者、TI芯片玩家以及被Windows卡到想换系统的同学。1. 项目准备与版本选择思路1.1 先搞明白你要装哪个CCS很多朋友一上来就下载最新版结果发现系统跑不动或者跟目标芯片不匹配。CCS的版本策略和Windows版不太一样Linux版从CCS 6开始就是官方支持目前主流的CCS 10、CCS 12都提供.tar.gz或者.run安装包。选择版本不是越大越好而是看你的目标芯片。比如你调试CC2642、CC3200这类无线MCUCCS 12就挺合适如果是老旧的C2000系列DSP比如TMS320F28335用CCS 6、CCS 8反而更稳定。我个人的经验是先打开TI官网的CCS下载页面查看“Supported Devices”列表确认你的芯片型号被哪个版本支持。另外要注意CCS 12要求64位系统和至少8GB内存如果机器配置低装CCS 10会更流畅。1.2 Linux发行版选择与系统环境自检Ubuntu、Debian、Fedora、Deepin这类系统我都试过最省心的还是Ubuntu 20.04 LTS或22.04 LTS。CCS安装脚本对Ubuntu的依赖库覆盖最全其他发行版容易缺东西。安装之前先打开终端做几件事。uname -a lsb_release -a free -h df -h /opt确认系统架构是x86_64内存大于4GB/opt或你准备安装的目录剩余空间不少于5GB。CCS本体加组件包大概3GB起再加上工作区和编译中间文件预留10GB比较稳。这里还要强调一个点Linux版的CCS默认安装在当前用户目录下也可以放到/opt或者/home/username/ti。不建议装到系统盘根目录但权限不足的地方否则后面对驱动和工程文件写权限会很麻烦。1.3 理解CCS在Linux下的软件栈很多新手问为什么Linux版CCS启动后界面那么简陋甚至汉字发虚这和CCS基于Eclipse框架有关。CCS本质上是一个定制化的Eclipse加上TI自己的编译器、调试器插件和一系列命令行工具。Linux版还需要依赖一组图形库、USB库和Java运行环境。关键依赖包括libc6,libstdc6基础运行库一般系统自带libusb-1.0-0USB通信用于连接XDS110等仿真器libgtk-3-0Eclipse图形界面库libncurses5或libncurses6终端和部分烧录工具使用openjdk-11-jreCCS的许可证管理和部分服务需要安装之前用一条命令把这些常见依赖装上省得安装过程中报错sudo apt update sudo apt install -y libc6 libstdc6 libusb-1.0-0 libgtk-3-0 libncurses5 libncurses6 openjdk-11-jre wget tar如果你的Ubuntu版本较新libncurses5可能已经不在官方源里需要启用multiverse仓库或者从旧包中提取。这个坑我在后面排查部分详细讲。2. 安装过程详细拆解2.1 下载安装包并校验文件完整性TI官网的下载链接通常需要填写表单才给地址浏览器直接下载也行。推荐下载.tar.gz格式的离线安装包体积大但装起来省心。.run格式是在线安装器网络不稳时容易中断。下载完成后先做校验。TI官网每个文件旁边有MD5或SHA256值用下面的命令核对md5sum CCS12.5.0.00007_linux-x64.tar.gz如果校验值对不上大概率下载损坏解压安装时会报莫名其妙错误。这个步骤别跳过我见过有人卡在安装器崩溃最后才发现是压缩包损坏。解压到指定目录mkdir -p ~/downloads/ccs tar -xzf CCS12.5.0.00007_linux-x64.tar.gz -C ~/downloads/ccs cd ~/downloads/ccs/ccs_setup_12.5.0.00007解压后能看到一个ccs_setup_*.bin或install.sh文件。这个可执行文件就是安装向导。2.2 运行安装脚本与组件选择使用图形安装向导时需要先给执行权限chmod x ccs_setup_*.bin sudo ./ccs_setup_*.bin这里有个小技巧不要用sudo。如果你以root身份运行安装器装出来的CCS文件归属root之后普通用户启动CCS会无法写入配置。应该先归档到普通用户目录或者用普通用户运行需要写系统目录时再输密码。如果确实需要装到/opt那就在安装完成后把整个目录所有权改回自己sudo chown -R $USER:$USER /opt/ti安装过程中会出现组件选择界面。这里根据目标芯片勾选即可不用全选。比如玩C2000就勾选“C2000 ultra low-power MCUs”玩MSP430就勾选“MSP430 ultra low-power MCUs”无线芯片选“SimpleLink MCUs”。同时记得勾选“XDS debug probes support”这是硬件调试器驱动部分不然后面连接开发板会找不到设备。如果安装时忘了选某些组件不用卸载重装CCS支持后续通过Help - Install New Software或重新运行安装脚本增量安装。但增量安装偶有缓存问题建议一次性选全。2.3 安装完成后的环境变量配置安装完成后默认路径有两种如果普通用户安装一般在~/ti/ccs12xx如果用root安装一般在/opt/ti/ccs12xx。接下来的操作是把CCS的可执行目录加入PATH并设置工作区环境变量。编辑~/.bashrc在末尾追加export CCS_HOME~/ti/ccs12xx export PATH$PATH:$CCS_HOME/ccs/eclipse如果你装的是其他版本把ccs12xx换成真实路径。保存后激活source ~/.bashrc然后验证which ccs如果输出~/ti/ccs12xx/ccs/eclipse/ccs或者提示找不到确认一下eclipse目录下可执行文件名。CCS 10之后的可执行命令是ccs之前版本可能是eclipse。也可以直接运行ccs能弹启动界面就说明环境变量没问题。2.4 首次启动与工作区设置首次启动CCS会提示选择工作区路径。我建议单独建目录不要和安装目录混在一起。比如~/workspaces/ccs_workspace这个目录用来存放你的所有工程。工作区不要放在/tmp或移动硬盘上编译时会频繁读写至少要用本地SSD。CCS的索引和编译数据库都在这儿路径里有中文或空格也可能导致编译环境异常尽量用纯英文路径。启动后还能在Window - Preferences - General - Workspace里调整字体、字符编码。中文用户建议把Text file encoding设为UTF-8否则从Windows移植过来的工程注释会乱码。这个不是CCS本身问题是Eclipse框架的老传统。3. 仿真器驱动与硬件调试配置3.1 XDS仿真器在Linux下的驱动原理CCS的调试器家族有XDS100、XDS110、XDS200等。Linux下连接这些调试器不能像Windows那样自动装驱动需要手写udev规则。Linux通过libusb访问USB设备而默认权限通常只给root普通用户无法访问仿真器。TI在安装包里其实自带了udev规则文件但在某些发行版上不会自动加载。我们需要手动把规则复制到系统目录。规则文件一般在安装目录下的如下位置~/ti/ccs12xx/ccs/install_scripts/Drivers/或者~/ti/ccs12xx/ccs/common/uscif/xds110/不同版本位置略有差异。找到类似xds110.rules的文件执行sudo cp ~/ti/ccs12xx/ccs/install_scripts/Drivers/xds110.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules sudo udevadm trigger然后把当前用户加入dialout组和plugdev组这样不用root就能访问串口和USB设备sudo usermod -aG dialout $USER sudo usermod -aG plugdev $USER记得重新登录或者执行newgrp dialout让组生效。3.2 连接开发板与烧录测试以最常见的XDS110为例用USB线连接开发板和电脑插上后终端执行lsusb正常情况下能看到类似Bus 001 Device 003: ID 0451:bef3 Texas Instruments XDS110如果看不到先换数据线试试。很多USB线只能充电不能传数据这是排查驱动优先级低的问题。确认了设备存在再打开CCS新建一个空工程选择目标芯片进入Debug配置界面。在Debug Configuration里选择Texas Instruments XDS110 USB Debug Probe连接方式选USB。点Test Connection正常情况下会出现一段输出最后提示The JTAG DR Integrity check passed。如果出现Error connecting to the target多半是芯片未上电、连接线松动或者芯片型号选错。这里多嘴一句CCS的Debug配置窗口里有很多参数新手不用管那些频率和协议细节默认值就行等跑通基础烧录再研究高级选项。3.3 常见权限不足的规避方案有些人将驱动规则复制好了还是无法连接打开dmesg可以看到权限拒绝。这时直接以root启动CCS是最快的验证方式但不推荐长期用。更好的方案是二次确认udev规则匹配。查看设备信息udevadm info -a -n /dev/bus/usb/001/003将输出中的idVendor和idProduct与规则文件里的比对如果产品号带多个后缀比如0451:bef3和0451:beef规则里可能只写了XDS110系列的公共前缀0451:*。如果规则匹配不上手动新建规则文件sudo nano /etc/udev/rules.d/99-xds110.rules写入SUBSYSTEMusb, ATTRS{idVendor}0451, MODE0666, GROUPplugdev保存后重新加载udev规则拔插USB设备再试一次。4. 常见问题与实战排查4.1 启动崩溃与图形界面缺包问题Linux版CCS启动崩溃大概率是图形库版本不对或者缺少某个共享库。启动时用命令行运行能直接看到错误信息ccs -console -debug如果提示libgtk-x11-2.0.so.0: cannot open shared object file说明缺少GTK2库。CCS 12基于Eclipse 4.x虽然默认用GTK3但部分插件仍需要GTK2。Ubuntu 22.04默认没有GTK2需要手工安装sudo apt install libgtk2.0-0另外新版Ubuntu默认使用Wayland显示协议Eclipse对Wayland的兼容性不佳可能导致窗口无法缩放或卡死。解决办法是强制CCS以XWayland方式运行在启动前设置export SWT_GTK31 export GDK_BACKENDx11 ccs如果问题依旧试试在~/.xprofile里添加export GDK_BACKENDx11然后重启桌面环境。4.2 找不到libncurses.so.5的解决办法很多终端工具和编译器依赖libncurses.so.5但新系统只带libncurses.so.6。这个报错很经典在网上搜“libncurses.so.5”能看到一堆求助帖。常规解法是从Ubuntu 18.04的软件包仓库里下载libncurses5的deb包安装。如果你不想折腾旧包可以做一个软链接应急sudo ln -s /lib/x86_64-linux-gnu/libncurses.so.6 /lib/x86_64-linux-gnu/libncurses.so.5 sudo ln -s /lib/x86_64-linux-gnu/libtinfo.so.6 /lib/x86_64-linux-gnu/libtinfo.so.5实际测试发现大部分工具调用ncurses的符号是兼容的软链接能骗过加载器。但有少数工具对API版本敏感链接高版本库会段错误。如果遇到段错误还是老老实实去找libncurses5的deb包用dpkg -i安装。4.3 烧录报错与目标板连接失败连接报错原因是多方面的这里整理一个速查表按优先级排查现象可能原因解决动作设备列表中看不到仿真器USB线问题、端口无权限换数据线执行lsusb确认重新加载udev规则Test Connection返回JTAG错误目标板不上电、引脚接触不良检查供电和JTAG线序按目标板复位键重试连接成功但烧录超时系统负载高、USB电源不稳换USB口拔掉不必要外设降低调试时钟频率0x00000000地址写入失败Flash保护位开启在Flash Settings里执行Unlock链接文件配置错误找不到内置编译器安装时未勾选对应编译器组件Help - Install New Software添加对应编译工具链其中烧录超时大家问得最多。Linux下USB调度策略和Windows不同某些USB3.0口对XDS110支持并不好。我后来换成主板后置USB2.0口稳定性提升明显。如果你用的是笔记本电脑尽量用自带USB口不要经过扩展坞。4.4 使用命令行构建工程的隐藏优势CCS在Linux下除了IDE界面完全支持命令行构建这对自动化编译和脚本集成非常方便。CCS的构建工具gmake位于~/ti/ccs12xx/ccs/utils/bin/gmake编译工程前先用CCS打开工程并构建一次会在工程目录下生成Debug或Release配置。之后可以在终端执行cd ~/workspaces/ccs_workspace/mydsp_project ~/ti/ccs12xx/ccs/utils/bin/gmake -f makefile这个命令会调用编译器生成.out文件。配合find和scp命令就能写个一键构建加部署脚本把生成的可执行文件拷贝到目标板或服务器。我一般在CI里就是这么用的省去了每次打开IDE点那只小虫子的时间。有一个容易被忽略的坑命令行构建时CCS的环境变量可能没加载导致编译器路径找不到。解决方法是构建前先执行source ~/ti/ccs12xx/ccs/eclipse/ccs_setup_env.sh4.5 Linux中文显示和字体问题调优Linux下CCS的菜单字体默认是系统字体中文环境可能发虚或者出现方框。原因是Eclipse默认字体没有包含中文字形。可以到Preference - General - Appearance - Colors and Fonts把Basic - Text Font改成Noto Sans Mono CJK SC或WenQuanYi Micro Hei。如果没有这些字体安装一下sudo apt install fonts-noto-cjk另外代码编辑器里的注释如果出现编码问题检查工程属性Resource - Text file encoding改成UTF-8并重新index。对于从Windows Code Composer Studio复制过来的老工程源文件可能是GBK需要先用iconv转码iconv -f GBK -t UTF-8 old_file.c new_file.c如果不转码直接改编辑器编码也能看到正常中文但其他工具链如grep、git diff会对不上行号。长痛不如短痛统一转为UTF-8。5. 从Windows迁移到Linux的实操心得5.1 工程文件迁移要注意的事项Windows下的CCS工程迁移到Linux核心点不是安装软件而是工程路径和编译器的路径差异。Windows工程文件中的${PROJECT_LOC}等变量可能包含反斜杠在Linux下会被当成转义符。建议用CCS自带的工程导入功能Project - Import CCS Projects - Select search-directory选择包含.projectspec或.ccsproject文件的目录CCS会自动处理路径转换。如果手工拷贝文件记得把工程目录下的.settings、.cproject等配置一并拷贝否则工程类型和编译选项会丢失。还有一个血泪教训工程文件里不要出现中文路径Windows下可能没问题Linux下Eclipse的某些插件会在构建时静默失败报一大堆红叉却定位不到具体原因。遇到这种情况新建一个全英文路径的工程把源文件复制过去重新构建。5.2 编译器路径与SDK版本冲突Linux下有时会同时安装多个版本的CCS和SDK比如装了CCS 10又装了CCS 12。工程属性里默认编译器路径可能还指向旧版本导致编译报找不到头文件。在工程属性CCS General - Products里查看当前使用的产品版本取消勾选不匹配的SDK。同时Preference - Code Composer Studio - Products里可以设置默认产品版本。另外TI的编译器分两大流派ti-cgt传统编译器和clang新编译器。CCS 12默认支持两者但老工程可能指定了ti-cgt的特定版本。如果编译时报Tool versions are not compatible进Project Properties - General - Tool Chain查看选定版本的编译工具链是否存在。在Linux下编译器路径通常在~/ti/ccs12xx/ccs/tools/compiler/下删除不用的编译器版本能减少混淆。5.3 自动备份工作区和工程配置Linux的权限机制比Windows严格挂载NTFS分区或者网络盘时经常出现工程文件只读的情况。只要之前用root打开过CCS现在用普通用户打开工作区整个.metadata目录会权限错乱。解决办法是用chown切回用户权限chown -R $USER:$USER ~/workspaces/ccs_workspace这个操作对迁移后的工作区非常有效。我建议每次重大配置修改后直接把整个workspace用tar打包备份tar -czf ccs_workspace_$(date %Y%m%d).tar.gz ~/workspaces/ccs_workspace放到NAS或云盘上出问题解压就能恢复。结尾CCS在Linux下的安装配置其实不复杂但坑点非常琐碎。我从第一次安装到现在走过了缺库、权限、驱动识别、工程迁移各种弯路现在总结下来核心思路就是先确认版本匹配再装齐依赖接着处理udev驱动最后才是打开IDE开始写代码。很多问题看起来是CCS问题其实是Linux系统环境和用户权限问题只要你愿意在命令行多敲几行都比在图形界面里翻设置要快。我个人目前的工作流是官方CCS负责驱动和调试日常编辑用的文本编辑器编译用命令行脚本这样效率最高。如果后续你想深入了解某个部分比如XDS100和XDS110的调试速度差异或者C2000 CLA编译器优化欢迎留言探讨。
