1. 为什么要在 Mac 上折腾 LuatOS 烧录这件事
如果你手头用的是 Mac,同时又在做合宙 LuatOS 相关的开发,那你大概率经历过一个很尴尬的局面:官方工具 Luatools 只有 Windows 版本。你打开合宙的文档,教程里全是 Windows 截图,下载链接点进去是 exe 文件,社区里搜一圈,回答基本都是“装个虚拟机吧”或者“找台 Windows 电脑”。这种感觉就像拿着一把好螺丝刀,但螺丝全是反牙的。
我自己是从 Air724UG 开始接触 LuatOS 的,后来陆续用了 Air780E、Air101、Air103 这几块板子。最开始的一年多,我是在一台老 Windows 笔记本上做烧录和调试,代码在 Mac 上写,写完拷到 Windows 上烧,烧完再回 Mac 看日志。来回切换的效率极低,尤其是调试 AT 指令和看串口输出的时候,两个屏幕来回瞟,思路经常被打断。
后来我花了一个周末专门研究怎么在 macOS 上把 LuatOS 的烧录和串口调试跑通。踩了不少坑,也试了好几种方案,最终找到了一套相对稳定的工作流。这篇文章就是把这套流程完整拆开,从方案选型、工具准备、驱动处理、烧录操作到串口调试和问题排查,全部讲清楚。不管你是刚拿到第一块合宙开发板的新手,还是已经被 Windows 虚拟机折磨了很久的老玩家,应该都能从里面找到能直接用的东西。
核心关键词先摆出来:Luatools、macOS、LuatOS、烧录、串口调试。这几个词贯穿全文,后面每个环节都会围绕它们展开。
2. 方案选型:Mac 上跑 Luatools 的几条路
2.1 先搞清楚 Luatools 到底依赖什么
Luatools 这个工具本质上是一个 Windows 桌面程序,它的核心功能有两块:一是通过 USB 转串口芯片把固件写到合宙模组的 Flash 里,二是打开串口接收模组输出的日志和 AT 指令交互。它依赖的东西包括 Windows 的串口驱动体系、.NET 运行环境,以及一套合宙自己封装的烧录协议。
在 Mac 上要跑它,核心矛盾就一个:macOS 没有原生 Windows 串口驱动栈,也没有 .NET 的 Windows 运行时。所以任何方案的本质都是“在 Mac 上模拟出一个 Windows 环境,同时把 USB 串口设备透传进去”。
2.2 三种主流方案对比
我把当时调研和实测过的方案整理成了一张表,方便你直接对照选择:
| 方案 | 原理 | 优点 | 缺点 | 适合人群 |
|---|---|---|---|---|
| 虚拟机方案 | 在 macOS 上跑 Parallels Desktop 或 VMware Fusion,安装 Windows 系统 | 兼容性最好,Luatools 所有功能都能用 | 占资源,需要 Windows 授权,USB 透传偶尔抽风 | 需要完整功能、不介意多装一个系统 |
| 双系统方案 | 用 Boot Camp 装 Windows | 性能最好,无虚拟化损耗 | 要重启切换,Apple Silicon 机器不支持 | Intel Mac 用户 |
| 跨平台替代方案 | 用 Mac 原生串口工具 + 合宙命令行烧录工具 | 轻量,不装 Windows | 功能不完整,部分模组不支持 | 只做简单烧录和调试 |
提示:如果你用的是 Apple Silicon(M1/M2/M3)的 Mac,Boot Camp 这条路直接堵死,只能在虚拟机和跨平台方案里选。
2.3 我最终为什么选了虚拟机 + 原生工具混合流
纯虚拟机方案的问题是,每次烧录都要开着虚拟机,风扇呼呼转,而且 USB 透传在 macOS 上偶尔会断。纯原生工具方案的问题是,合宙的命令行烧录工具对某些老模组支持不好,而且没有图形界面看烧录进度。
我最后采用的是混合流:烧录用虚拟机里的 Luatools,串口调试用 macOS 原生的串口工具。这样烧录的时候开虚拟机,烧完就关掉,日常调试完全不依赖 Windows。这个组合用了大半年,稳定性很好,下面把每个环节拆开讲。
3. 虚拟机环境搭建与 USB 透传配置
3.1 虚拟机软件的选择和安装
Parallels Desktop 和 VMware Fusion 我都用过。Parallels 对 macOS 的融合度更好,USB 设备透传更顺滑,但它是订阅制。VMware Fusion 现在个人使用免费,功能也够用,只是在 Apple Silicon 上跑 Windows 11 ARM 版的时候,某些 USB 转串口芯片的驱动需要额外折腾。
我目前主力用的是 Parallels Desktop 19,跑 Windows 11 ARM 版。安装过程不复杂,下载 Parallels 后它会引导你下载 Windows 镜像,一路下一步就行。这里有个细节:不要用 Windows 10 的镜像,Windows 11 ARM 对 Apple Silicon 的 USB 驱动支持更完善,尤其是 CH340 和 CP210x 这两款常见的 USB 转串口芯片。
安装完 Windows 后,第一件事是装 Parallels Tools,这个工具包负责鼠标、键盘、USB 设备的透传。装完之后重启一次虚拟机,确保 USB 设备能在 macOS 和 Windows 之间正常切换。
3.2 USB 转串口驱动的安装
合宙的模组通常通过 USB 转串口芯片和电脑通信,常见的有三种:CH340、CP2102、FT232。你拿到板子后,先在 macOS 的“系统信息”里看一下 USB 设备树,确认芯片型号。
在 Windows 虚拟机里,需要装对应的驱动:
- CH340:去沁恒官网下载 Windows 驱动,安装后设备管理器里会出现 COM 口
- CP2102:去 Silicon Labs 官网下载 VCP 驱动
- FT232:去 FTDI 官网下载 VCP 驱动
装完驱动后,在 Windows 的设备管理器里应该能看到“端口”下面多了一个 COM 设备。如果没看到,检查虚拟机的 USB 设置里有没有把设备连接到 Windows。
注意:macOS 本身也会识别这些 USB 转串口芯片,有时候会出现“macOS 和 Windows 抢设备”的情况。解决办法是在 Parallels 的 USB 设置里,把该设备固定分配给 Windows,这样插拔的时候就不会来回跳。
3.3 Luatools 的下载和安装
Luatools 在合宙的官方文档站可以下载,搜“Luatools 下载”就能找到。下载下来是一个压缩包,解压后直接运行 exe 文件,不需要安装。这一点比很多 Windows 工具都省事。
第一次运行的时候,Windows 可能会弹 SmartScreen 警告,点“更多信息”再点“仍要运行”就行。Luatools 的界面比较朴素,左边是功能菜单,右边是日志输出区,顶部有固件选择、串口选择、下载按钮这些。
3.4 虚拟机 USB 透传的实操步骤
这一步是整个方案里最容易出问题的环节,我把具体操作拆开:
- 把合宙开发板通过 USB 线插到 Mac 上
- 在 macOS 顶部菜单栏找到 Parallels 的 USB 图标,点开
- 找到你的 USB 转串口设备,把它勾选为连接到 Windows
- 进入 Windows,打开设备管理器,确认 COM 口出现
- 打开 Luatools,在串口下拉框里选择对应的 COM 口
如果第 3 步找不到设备,先检查 macOS 有没有识别到。在“系统信息”的 USB 栏目里,如果能看到设备但 Parallels 菜单里没有,重启一次 Parallels 的 USB 服务,或者直接重启虚拟机。
4. LuatOS 固件烧录的完整流程
4.1 烧录前的准备工作
烧录之前有几件事必须确认,不然很容易白忙活:
- 固件文件:从合宙的固件发布页下载对应模组的固件包,通常是 .bin 或 .pac 格式。注意模组型号要匹配,Air724UG 的固件不能烧到 Air780E 上。
- 板子状态:确认板子供电正常,USB 线是数据线不是充电线。这个坑我踩过,一根看起来一模一样的线,只能充电不能传数据,排查了半天。
- 串口占用:确保没有其他程序占着串口。macOS 上的串口工具如果开着,Windows 虚拟机里可能就选不到这个 COM 口。
4.2 Luatools 烧录参数详解
打开 Luatools 后,界面上的参数看着多,其实核心就几个:
| 参数 | 说明 | 常见值 |
|---|---|---|
| 固件路径 | 选择下载好的固件文件 | 按实际路径 |
| 串口 | 选择模组对应的 COM 口 | COM3 或 COM4 |
| 波特率 | 烧录时的通信速率 | 921600 或 115200 |
| 下载模式 | 模组的启动模式 | 通常选“下载” |
| 校验方式 | 烧录后的校验 | 默认即可 |
波特率这里有个经验:921600 烧录快,但对 USB 转串口芯片和线材质量要求高。如果烧录过程中频繁报错,先把波特率降到 115200 试试。我手头有一块老 Air724UG 板子,用 921600 十次有三次失败,降到 115200 后一次都没出过问题。
4.3 烧录操作步骤和现场记录
具体操作流程如下:
- 板子进入下载模式。合宙模组通常有两种方式:一种是按住 BOOT 键再插 USB,另一种是通过 AT 指令进入。具体看模组手册。
- 在 Luatools 里选好固件和串口,点“下载”按钮。
- 观察日志区,正常会看到“开始下载”“擦除 Flash”“写入中”“校验通过”这样的输出。
- 烧录完成后,板子会自动重启,日志区会显示模组启动信息。
我第一次烧录的时候,日志区一直停在“等待设备响应”,后来发现是板子没进下载模式。合宙的模组如果之前烧过程序,上电后可能直接跑旧程序,不会自动进下载模式。解决办法就是按住 BOOT 键再上电,或者用 AT 指令强制进入。
提示:烧录过程中不要拔 USB 线,也不要让 Mac 休眠。我有一次烧到一半 Mac 自动休眠,醒来后板子变砖了,只能重新烧。
4.4 烧录失败的常见原因
烧录失败的原因很多,我整理了一个速查表:
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 找不到 COM 口 | 驱动没装或 USB 没透传 | 检查设备管理器,重新透传 |
| 一直等待设备 | 板子没进下载模式 | 按住 BOOT 键上电 |
| 擦除失败 | Flash 损坏或供电不足 | 换 USB 口,用带供电的 Hub |
| 校验失败 | 波特率太高或线材差 | 降到 115200,换线 |
| 烧录后不启动 | 固件不匹配 | 确认模组型号和固件版本 |
5. macOS 原生串口调试方案
5.1 为什么烧录完还要单独调试
烧录只是把固件写进去,真正开发的时候,你需要看模组输出的日志、发 AT 指令、调试 Lua 脚本。这些操作如果都在虚拟机里做,体验很差:虚拟机占资源,串口透传偶尔断,复制粘贴日志也麻烦。
macOS 原生有一套很成熟的串口工具链,用起来比 Windows 舒服得多。我现在的流程是:烧录在虚拟机里完成,烧完关掉虚拟机,用 Mac 原生工具做日常调试。
5.2 macOS 串口设备识别
macOS 上串口设备通常出现在/dev/tty.usbserial-*或/dev/tty.wchusbserial*这样的路径下。插上板子后,在终端里执行:
ls /dev/tty.*就能看到所有串口设备。CH340 芯片通常显示为tty.wchusbserial,CP2102 显示为tty.usbserial,FT232 显示为tty.usbserial-FT*。
如果看不到设备,先确认 macOS 有没有识别到 USB。在“系统信息”的 USB 栏目里找一下,如果没有,说明驱动有问题。macOS 从 Big Sur 开始,CH340 和 CP2102 的驱动基本都内置了,但某些老版本可能需要手动装驱动。
5.3 命令行串口工具的使用
macOS 自带的screen命令就能做串口调试,用法很简单:
screen /dev/tty.wchusbserial1420 115200这行命令的意思是:打开/dev/tty.wchusbserial1420这个串口,波特率 115200。执行后你会看到模组输出的日志,也可以直接输入 AT 指令。
退出screen的方法是按Ctrl+A然后按K,再按Y确认。这个快捷键有点反人类,我用了很久才记住。
screen的缺点是功能比较基础,不能保存日志、不能做高亮、不能同时开多个串口。如果你需要更强大的功能,可以用minicom或picocom:
brew install picocom picocom -b 115200 /dev/tty.wchusbserial1420picocom的退出方式是Ctrl+A然后Ctrl+X,比screen稍微好记一点。
5.4 图形化串口工具推荐
如果你不习惯命令行,macOS 上也有几个不错的图形化串口工具:
- Serial:Mac App Store 里可以下载,界面简洁,支持日志保存和发送历史
- CoolTerm:免费,功能丰富,支持多串口、数据导出、脚本自动化
- minicom:命令行工具,但可以通过 brew 安装,功能强大
我平时用 CoolTerm 比较多,它的日志保存功能很好用,调试的时候可以把输出存下来,事后慢慢分析。而且它支持“发送文件”功能,可以把一串 AT 指令写成一个文本文件,一次性发出去,省得一条条敲。
5.5 串口调试的实用技巧
调试 LuatOS 的时候,有几个技巧能省不少时间:
- 日志分级:LuatOS 的日志有不同级别,调试的时候可以把日志级别调高,只看关键信息
- AT 指令速查:常用的 AT 指令可以存成一个文本文件,用 CoolTerm 的发送文件功能一键发送
- 时间戳:在串口工具里开启时间戳,方便定位问题发生的时间点
- 日志过滤:如果日志太多,可以用
grep过滤,比如screen /dev/tty.wchusbserial1420 115200 | grep "ERROR"
注意:用
screen或picocom的时候,如果直接关掉终端窗口,串口可能不会正常释放。下次再打开会提示“Resource busy”。解决办法是用lsof | grep tty找到占用进程,然后 kill 掉。
6. 常见问题与排查技巧实录
6.1 虚拟机里找不到串口设备
这是最常见的问题,排查思路如下:
- 先在 macOS 里确认设备识别正常,
ls /dev/tty.*能看到设备 - 检查 Parallels 的 USB 设置,确认设备已连接到 Windows
- 在 Windows 设备管理器里看有没有未知设备或黄色感叹号
- 如果有感叹号,说明驱动没装好,重新装对应驱动
- 如果设备管理器里根本没有,重启虚拟机再试
我遇到过一次,设备在 macOS 里正常,Parallels 菜单里也能看到,但连到 Windows 后设备管理器里死活不出现。后来发现是 Parallels Tools 版本太老,更新后就好了。
6.2 烧录过程中断连
烧录到一半 USB 断连,通常和供电或线材有关。合宙的模组在烧录时电流会增大,如果 USB 口供电不足,就会掉线。解决办法:
- 换一个 USB 口,优先用 Mac 机身上的口,不要用 Hub
- 如果必须用 Hub,选带独立供电的
- 换一根质量好的数据线,短一点更好
6.3 串口日志乱码
串口日志乱码基本都是波特率不对。LuatOS 模组默认的日志波特率通常是 115200,但有些固件会改成 921600。如果你看到乱码,先试试这两个值。
还有一种情况是数据位、停止位、校验位设置不对。标准配置是 8 数据位、1 停止位、无校验。如果串口工具里设错了,也会乱码。
6.4 烧录后模组不启动
烧录成功但模组不启动,可能的原因:
- 固件和模组型号不匹配
- 烧录时选错了下载模式
- 模组的启动引脚状态不对
我遇到过一次,烧录日志显示成功,但模组就是没反应。后来发现是固件版本太新,和手头这块老模组的硬件不兼容。换了一个旧版本的固件就好了。
6.5 macOS 系统数据占用过大的问题
这个问题和 LuatOS 开发本身关系不大,但很多 Mac 用户都会遇到。虚拟机镜像、串口日志、固件包这些东西日积月累,会占不少空间。定期清理:
- 删除不用的虚拟机快照
- 清理
~/Library/Logs下的日志 - 把旧的固件包归档到外部硬盘
6.6 常见问题速查表
| 问题 | 排查方向 | 快速解决 |
|---|---|---|
| 找不到串口 | 驱动、USB 透传 | 重装驱动,重新透传 |
| 烧录失败 | 波特率、线材、供电 | 降波特率,换线,换 USB 口 |
| 日志乱码 | 波特率、数据位 | 改 115200,8N1 |
| 模组不启动 | 固件匹配、启动模式 | 换固件,检查 BOOT 引脚 |
| 串口被占用 | 其他程序占用 | lsof找到进程 kill 掉 |
| 虚拟机卡顿 | 资源分配不足 | 增加内存和 CPU 核心 |
7. 一些实操心得和后续扩展
这套方案我用了一年多,中间换过三块板子、两台 Mac,整体稳定性是可靠的。有几个心得值得单独说一下。
第一,不要追求全在虚拟机里搞定。烧录和调试分开,烧录用虚拟机,调试用原生工具,这个分工是最舒服的。虚拟机只在烧录的时候开,平时关着,省电省资源。
第二,USB 线材的投资很值。我买过一堆便宜线,最后发现能稳定跑 921600 波特率的只有那根原装线。线材这东西,看起来一样,实际差别很大。
第三,日志一定要存。调试的时候觉得“这个错误我记住了”,过两天就忘了。用 CoolTerm 或screen的日志功能,把每次调试的输出都存下来,事后翻查很方便。
后续如果合宙出了 macOS 原生的烧录工具,这套方案就可以退休了。但在那之前,虚拟机加原生串口工具的组合,应该是 Mac 用户做 LuatOS 开发最实际的路径。如果你也在用 Mac 做嵌入式开发,不妨试试这个流程,踩过的坑我都写在上面了,应该能帮你省下不少时间。