说句大实话:这个问题的本质不是“装”,而是“搬”
我最早接到这个需求是在一个完全断外网的内网实验室里,手里一台 ADALM-PlutoSDR,机器上装了 MATLAB(还是正版授权的校园版),结果打开“获取硬件支持包”之后,界面卡在 MathWorks 账号登录那儿,从下午折腾到晚上,愣是连支持包长什么样都没见到。
后来我换了个思路才想明白:离线安装 PlutoSDR 硬件支持包,难点根本不在“安装”这一步,而在“下载”这个环节怎么处理。支持包安装器说白了是一个带界面的文件分发工具,它需要走网络、需要账号校验,才能真正把文件拉到本地。只要能想办法把支持包文件搞到本地,离线机器上完全不需要账号也能正常装。你甚至可以把装好的支持包整体打包带走,换一台同样 MATLAB 版本的机器直接复用。
这篇文章就按我实际操作的链路来讲:先在能联网的机器上把下载和安装拆开,再把文件搬进离线机器,最后处理驱动、固件和 MATLAB 连接验证这些收尾活。里面每一项都是我踩过坑之后整理出来的,包括版本怎么配对、文件夹该拷哪个、设备枚举失败怎么查,保证你照着做能少走很多弯路。
1. 先把卡点看清楚:支持包下载为什么非要账号
1.1 支持包安装器的工作机制
MathWorks 的硬件支持包不像普通工具箱,不是装完 MATLAB 就自带的。它通过supportPackageInstaller(也就是主界面里的“获取硬件支持包”)来分发,安装器本身逻辑很简单:联网 → 登录账号 → 服务端校验你有没有下载权限 → 拉取文件 → 解压安装。
问题就出在前面三个步骤。很多实验室、高校机房、军工单位的机器是物理隔离的,没有外网就登录不了 MathWorks 账号,没有账号就触发不了下载流程,于是整个链条在第一环就断了。
但这里有个很多人没注意到的细节:支持包安装器里有一个选项叫“下载但不安装”,你可以在有网、有账号的机器上先把所有需要的文件下载到本地,得到一个完整的缓存目录,然后把整个目录搬到没网的机器上,再在目标机器上让安装器“从文件夹安装”。整个离线安装的可行基础,就是这个机制。
1.2 离线安装的逻辑拆解
所以“没有 MathWorks 账号也能搞定”这句话,准确的翻译是:目标机器不需要登录 MathWorks 账号,但准备阶段仍然需要一个能联网、能登录的机器来做下载中转。这个中转机可以是自己的笔记本,也可以是同事的电脑,甚至可以是借来的临时环境。只要文件能完整落地,剩下的安装环节就完全不依赖网络了。
我在实际操作中还发现,支持包安装器对文件夹的识别方式并不挑剔——它主要看文件夹里有没有对应的包描述文件和安装资源。所以你没必要理解它内部每一个文件是什么,你只需要保证:下载时选的那几个支持包,对应的数据文件全部拷贝完毕,不要漏掉任何一个子文件夹就行。
注意:中转机和目标机器的 MATLAB 主版本必须一致。比如中转机是 R2023a,目标机也得是 R2023a,跨大版本拷贝支持包文件大概率会报“不支持此版本”的错。这一点我后面专门讲,因为这是我实际踩过的最大一个坑。
2. 版本匹配关系:MATLAB、支持包、PlutoSDR 固件,三者必须咬死
2.1 我踩过的版本错位教训
我第一次做离线安装时犯了个典型错误:在一台 R2023a 的机器上通过支持包安装器下载了 ADALM-PLUTO 支持包,然后拷给一台 R2024a 的目标机器。结果安装器打开文件夹后,直接提示“不支持安装此支持包版本”,整个流程卡死。
后来查文档才知道,MathWorks 的硬件支持包跟 MATLAB 版本是绑定的。同一款硬件,针对不同 MATLAB 版本,文件结构和驱动链可能完全不同。这不是简单的兼容性问题,而是安装器在解析文件夹时的硬性约束。
所以做离线安装的第一步,不是想怎么下载,而是先确认目标机器的 MATLAB 版本号。命令行里执行version就能看到R2023a、R2024a这样的完整版本号。
2.2 常见版本对照与选择建议
下表列的是我实操中确认可用的对应关系,不同线下环境可能略有差异,但大方向不会变:
| MATLAB 版本 | PlutoSDR 支持包版本(典型下载标识) | 常见固件配套 |
|---|---|---|
| R2021a / R2021b | v21.x / v22.x 系列 | 0.31 / 0.32 老版本固件 |
| R2022a / R2022b | v23.x 系列 | 0.32+ / 0.33 |
| R2023a / R2023b | v24.x / v25.x 系列 | 0.33+ / 0.34 推荐升级 |
| R2024a 及以上 | v25.x+ | 0.35+ 建议最新 |
这里面有个规律:支持包版本跟着 MATLAB 发版节奏走,而固件版本更多是和硬件本身的迭代相关。你不需要背这张表,但需要知道一点:如果目标机是旧版本 MATLAB,固件却太新,插上后 MATLAB 可能识别不了;反过来,如果支持包太新、固件太老,连接时也会超时。最稳妥的做法是装完支持包后,如果连接报错,优先考虑升级 PlutoSDR 固件,而不是换 MATLAB 版本。
2.3 同一套文件能复用到多台机器吗
可以。这是离线安装的一个隐藏福利。只要 MATLAB 版本相同,我试过把一套下载好的支持包文件夹拷给三台不同的离线机器,全部安装成功,不需要重新下载。所以如果实验室里有好几台机器都要用 PlutoSDR,只需要做一次中转下载,剩下的全是纯搬运。
但要注意,这个“复用”指的是安装源文件可以复用,机器上安装完成后的状态不能直接复制。Windows 下安装过程会往 MATLAB 的工具箱目录写入注册信息、往驱动目录装驱动,Linux 下还会动态链接系统库,这些操作必须在每台机器上真正执行一遍,不能简单地把SupportPackages文件夹整个复制过去就算了。
3. 在中转机上准备离线安装包:下载文件夹的完整操作
3.1 怎么触发“只下载不安装”
中转机上打开 MATLAB,有两条路进入支持包安装器:一是主界面“主页”标签右侧的“附加功能 → 获取硬件支持包”;二是在命令行窗口直接输入supportPackageInstaller,效果一样。
进入后安装器会要求登录 MathWorks 账号。这一步的解决办法就是老老实实用一个能登录的账号,因为中转机只是临时用,目标是拿到文件。登录后,你会在支持包列表里看到一大堆选项,需要找到 PlutoSDR 相关的项。不同版本里它的名字会有差异,常见的是:
- Communications Toolbox Support Package for Analog Devices ADALM-PLUTO Radio
- ADI RF SOM and PlutoSDR(旧版本里出现过这个合并包)
选好之后,安装器会让你选择安装位置。这里我先提醒一个关键点:安装位置就是它下载文件的落地目录,也是你之后需要拷贝的内容。建议不要改默认路径,让它在默认的 SupportPackages 目录下工作,后面你会发现整个目录结构更清晰。
然后到了最关键的选择页:安装器会问你“是否下载并安装”,你要选“下载但不安装”。有些版本这个选项叫“Download Only”或“Download without installing”,注意看英文界面。
3.2 下载完成后文件夹里到底有什么
以 Windows 为例,默认情况下相关文件会落在C:\ProgramData\MATLAB\SupportPackages\R20xxy这个路径下。注意ProgramData是隐藏文件夹,你在资源管理器里看不到,需要手动在地址栏输入完整路径,或者先在文件夹选项里打开“显示隐藏的项目”。
这个目录里通常包含两个核心内容:
downloads子文件夹:保存从服务器拉下来的原始安装包,格式可能是.zip、.cab或者.jar,不用管具体格式。- 已经解压出的
supportpackage或同名支持包目录:内含安装器真正要用的包描述文件info.xml以及若干数据文件。
我最开始看到这些文件时也犹豫过:“我到底该拷哪个?是拷 downloads 还是拷整个 SupportPackages?”实测下来答案是:整个R20xxy根目录拷走就行,不要只拷它下面的某个子文件夹。因为安装器在“从文件夹安装”时,是向上逐级搜索匹配的,它会根据 MATLAB 版本号定位到R20xxy这一层,然后读取里面的支持包信息。只拷一半或者叶目录,都会导致找不到支持包的报错。
3.3 拷贝过程中的注意点
文件确认完整后,用 U 盘或移动硬盘拷到目标机器。这里有几个实操细节:
- U 盘格式建议 exFAT 或 NTFS,不要用 FAT32。支持包里的固件文件有些超过 4GB,FAT32 会报文件过大无法复制。
- 确认下载任务全部结束再拔出 U 盘。支持包文件数量不少,拷贝完以后在中转机上先遍历一遍目录,确认没有空目录再拔。
- 路径中不要出现中文和空格。目标机器上你可以放在
C:\MATLAB_Offline或者D:\SupportPackages这种干净路径,避免安装器解析路径出错。 - 如果中转机下载过程中出现“下载失败、重试”的提示,不用慌,直接点重试。下载器支持断点续传,不会从头再来。
4. 离线机器上的安装实操:从文件夹安装的完整步骤
4.1 入口与常见界面逻辑
目标机器上打开 MATLAB,同样在命令行输入supportPackageInstaller,或者从主界面进入“获取硬件支持包”。这个时候安装器会先尝试联网,可能会卡一会儿——因为离线机器没有外网,它会等超时然后给你一个提示,这个不用管,等它界面出来就行。
关键几步如下:
- 安装器进入后,选择“从文件夹安装”(Install from Folder)。
- 浏览并选择你拷贝过来的
R20xxy文件夹。注意选到版本号这一层,不要选到里面某一个支持包单独的子目录。 - 安装器会自动扫描并列出可安装的支持包列表,这时你应该能看到 ADALM-PLUTO 相关的包出现在列表里。
- 确认后点安装。
安装过程看起来和在线安装没什么区别,进度条会走,控制台会输出一些驱动安装、路径更新之类的信息。整个安装一般需要 10 到 20 分钟,具体取决于机器性能和 MATLAB 版本,中间你会看到它往 MATLAB 的toolbox目录里写入一大堆文件。
重要提示:如果是在 Windows 上操作,建议右键“以管理员身份运行”MATLAB,再进行安装。我遇到过一次因为权限不足,安装器写不进去驱动目录,报了一个很奇怪的“无法创建文件”错误,换成管理员身份运行后就好了。
4.2 安装完成后的文件落点
装完后,支持包的主体文件会落在 MATLAB 的安装目录下的toolbox里,以及ProgramData\MATLAB\SupportPackages\R20xxy下。后者主要是运行时用的驱动、固件和示例资源。
判断安装是否成功的第一个快速方法,是在 MATLAB 命令行输入which(sdrdev)(不同版本函数路径可能略有差异,但大概率能返回类似...toolbox\shared\...的路径),如果返回值不为空,说明 MATLAB 已经能加载硬件支持包的相关函数。
Linux 下路径习惯不太一样,默认支持包目录常在~/MATLAB_SupportPackages/R20xxy,中转机上也是同理。拷贝时注意用户目录的访问权限。
4.3 Windows 下驱动链的特殊处理
很多人装完支持包后说识别不到 PlutoSDR,最后发现其实是 Windows 驱动的问题。PlutoSDR 插上电脑后,Windows 会把它的 USB 识别成两个设备:一个串口(COM 口)和一个 RNDIS 网络设备。MATLAB 要直接访问它,必须通过 libusb 或 WinUSB 驱动,而不是系统默认的串口驱动。
支持包安装器理论上会自动帮你做驱动替换,但在离线环境里,Windows 驱动签名验证或 Driver Store 缓存缺失,经常导致替换失败。我的经验是,装完支持包后先插上 PlutoSDR,打开设备管理器,如果看到设备前面有黄色感叹号,或者设备状态显示“驱动未安装”,那就需要用 Zadig 手动把驱动替换为 WinUSB(libusb)。这一步和 MATLAB 本身没有关系,是纯粹的 Windows 驱动操作,但它是 MATLAB 能连上设备的前置条件。
第一次操作时,建议在设备管理器里把 PlutoSDR 相关的所有设备(未知 USB 设备、串口设备、网络设备)都记下来,再用 Zadig 逐个替换。替换完成后设备名字会变成类似ADALM-PlutoSDR (Interface 0)这样的字样,说明驱动正确了。
5. 验证环节:连接 PlutoSDR 到 MATLAB 的完整链路
5.1 插上设备后应该看到的系统现象
硬件驱动处理完之后,重新插拔一次 PlutoSDR。Windows 下正常情况下你会看到网络适配器列表里多出一个网卡,IP 地址通常是192.168.2.1,串口设备也正常枚举。Linux 下则能在lsusb输出里找到Analog Devices ADALM-Pluto的条目。
这个阶段最容易迷惑的是“网络适配器”。MATLAB 访问 PlutoSDR 并不走 WiFi 或以太网,它走的是 USB 虚拟出的 RNDIS 网络接口。所以如果你看到网卡状态是“未连接”或者“未识别的网络”,不要慌,这不影响 MATLAB 连接。
5.2 MATLAB 命令行里的连接验证
以 R2023a 为例,在 MATLAB 命令行依次执行:
% 创建 PlutoSDR 接收对象 rx = sdrrx('Pluto'); % 设置一个最常见的 FM 广播频点,验证接收链路 rx.CenterFrequency = 98e6; rx.SamplesPerFrame = 2^12; % 实际采集一帧数据 data = rx();如果整个链路正常,data会返回一个复数数组,表示采集到的 IQ 数据。你可以直接plot(real(data))看波形,或者做一次快速傅里叶变换看到频域能量分布。
如果你用的是旧版本 MATLAB(R2021a 之前),硬件连接方式可能是plutoradio()或者sdrtx系列 API,具体函数名可以在命令行输入help sdr查看当前版本支持的条目。
5.3 连接报错时的排查顺序
我整理了一个按概率排序的排查清单,按这个顺序挨个查,基本能解决九成以上的连接问题:
| 报错现象 | 大概率原因 | 处理动作 |
|---|---|---|
No device found或No ADALM-Pluto | Windows 下 USB 驱动没换成 WinUSB,或 Linux 下 libiio 运行库缺失 | 先用 Zadig 换驱动;再确认目标机有libiio、libusb动态库 |
| 连接超时(Timeout) | 固件版本过老,或设备被其他程序占用 | 升级 PlutoSDR 固件;关闭可能占用 USB 串口的软件 |
Failed to load ...错误 | 支持包文件和 MATLAB 版本不匹配 | 回到中转机重新按目标机 MATLAB 版本下载 |
| 安装时提示文件夹无效 | 拷贝路径层级不对,或缺少下载内容 | 检查是否选到了R20xxy该层文件夹 |
| 权限相关报错 | Windows 下未以管理员身份运行 | 关闭 MATLAB,右键重新以管理员身份打开 |
这里特别提醒一点:MATLAB 的硬件支持包和第三方软件同时访问同一个串口设备时,非常容易出现连接超时。我调试时习惯把串口调试助手、ChipTool 之类的工具全部关掉再接 MATLAB,能省很多排查时间。
6. 我用过最省心的兜底方案和几个避坑习惯
6.1 如果连中转机都没有,怎么解决账号问题
有人可能问:“我连一台能登录 MathWorks 账号的机器都没有,怎么办?”
实测有效的办法:找个已经装好支持包的同事,直接把对方机器上的ProgramData\MATLAB\SupportPackages\R20xxy整个拷过来。前提是两台机器的 MATLAB 版本一致。这种方式跳过了下载环节,本质上相当于把别人下载好的安装源文件复制一份,然后在你的机器上再走一遍“从文件夹安装”。
我试过从一台 R2022b 的机器上打包整个 SupportPackages 目录到 U 盘,再拿到另一台 R2022b 的离线机器上装,效果和用中转机下载没有区别。而且由于文件已经在本地,安装速度甚至更快,因为少了网络校验环节。
6.2 Linux 离线机器的额外依赖
如果你要在 Linux 上做这件事,除了支持包本身,还建议预先离线安装好这些基础库:libiio、libusb、libserialport。我和同事在 Ubuntu 上踩过一次,支持包装好了,代码也能跑,但一连接就报找不到libiio.so.0,最后发现支持包不会自动装这些系统库,需要手动处理。
离线装库的办法也很常规:在一台能联网的同版本 Ubuntu 机器上用apt-get download把.deb包拉下来,全部拷贝到离线机器上,再dpkg -i。注意要按依赖顺序装,建议把apt-get depends列出来的包都拉下来。
6.3 安装时关闭杀毒软件和实时防护
Windows 下装支持包时,实时防护或杀毒软件偶尔会误判驱动文件为威胁,尤其是固件升级工具、Zadig 生成的驱动文件。我第一次装的时候卡在“安装过程中文件被占用”,查了很久才发现是安全软件把某个.dll给隔离了。
后续我的习惯是:装支持包之前,临时关闭第三方杀毒软件的实时防护和 Windows Defender 的“文件夹保护”,等安装和驱动替换全部结束之后再恢复。这一步操作简单,但能帮你省掉大量莫名其妙的报错排查时间。
6.4 固件升级:什么情况下一定要做
如果你连接 PlutoSDR 时出现长时间超时,且确认驱动没问题,大概率是固件太旧。PlutoSDR 固件升级不需要 MATLAB,官方提供单独的升级工具,一般是将固件文件放到 U 盘,按住 BOOT 键上电,或者用 USB 直接刷写。
升级固件后不掉数据、不影响已有工程,MATLAB 支持包对新固件是向下兼容的。但我还是建议在离线环境下,把固件升级工具和固件文件一并备份到 U 盘里,因为内网机器出一次问题时,临时找工具很痛苦。
我在实际做离线支持包安装的过程中,一开始也觉得这事情好像很麻烦,但捋清楚之后发现,整个过程说白了就是“中转下载 → 文件搬运 → 离线安装 → 驱动处理 → 验证连接”五个动作。只要抓住“版本必须一致”这条主线,其他问题都是可以按清单排查的小事。
如果你只是想在离线环境下让 PlutoSDR 能被 MATLAB 调用,上面这套流程完全够了。祝你能一次装通,少花点时间在处理环境上,多留点时间做真正想做的信号处理实验。