1. 项目概述:为什么我需要在 Mac 上烧录 LuatOS
先说结论:这解决的是一个“屁股决定脑袋”的尴尬问题。做物联网开发,尤其是用合宙 Air 系列模组跑 LuatOS 的场景,Windows 用户一直过着比较舒服的日子——官方工具 Lunatik(后来统一为 Luatools)最早只发布了 Windows 版,双击 exe 就能用。但近两年用 MacBook 做主力开发机的嵌入式工程师越来越多了,我自己就是从 ThinkPad 换到 M1 MacBook Pro 的。换过来的第一天就碰壁:想给 Air780E 烧个固件,翻了半天发现官方只有 Windows 工具,要么开虚拟机,要么借同事的 Windows 笔记本,要么硬着头皮用 esptool 之类第三方工具绕路,麻烦不说,还容易把固件烧错分区。
Luatools for macOS 就是合宙官方为 Mac 用户提供的原生烧录调试工具。它解决的痛点非常明确:在 macOS 系统上,直接通过 USB 线连接 LuatOS 开发板或模组,完成三件事——下载固件(flash)、下载 Lua 脚本(资源文件)、打开串口调试终端(trace 日志查看)。这篇文章我会把整个使用流程、坑点和原理都拆开讲一遍,适合刚拿到 Mac 准备入坑 LuatOS 的新手,也适合被虚拟机方案折磨到崩溃、想切换到原生方案的老手。
有一点先说明白:这篇文章涉及的所有操作基于合宙官方发布的 Luatools macOS 版本,以及我在 M1 MacBook Pro(macOS Sonoma)和 Intel Mac mini(macOS Catalina)上的实测结果。两个平台的安装方式和注意事项略有不同,我都会提到。
2. 打通 Mac 与 LuatOS 开发板的基础链路
2.1 Luatools 在整套 LuatOS 生态里的角色定位
在深入操作之前,先理解 Luatools 到底是个什么东西。你可以把它理解成“Luatos 开发者的瑞士军刀”,它不是一个简单的串口助手,而是集成了资源下载、固件烧录、trace 日志解析、SIM 卡状态查询等多个功能的综合桌面工具。
LuatOS 的工作原理跟传统嵌入式略有不同。传统 STM32 开发是编译完 bin/hex 文件,通过 J-Link、ST-Link 等仿真器写入芯片内部 Flash。而 LuatOS 跑在 Air 系列模组上,模组内部是一个完整的 MCU + 通信基带(比如 Air780E 用的是紫光展锐的8910 平台,Air101 用的是 RDA 平台),固件和用户脚本都是以文件形式存放在模组的文件系统里的。烧录的本质,是把编译好的固件包(通常是 .bin 或 .pac 格式)和用户 Lua 脚本(.lua 或 .luac)通过 USB 口发送到模组内部存储区。
这里就有个关键点:LuatOS 的“烧录”跟 STM32 那种“烧录”不完全是一回事。它更像是一种“文件传输 + 设备管理”的协议,Luatools 承担的就是这个“传输管理器”的角色。所以你会发现,Luatools 除了烧录,还能查看模组内部的文件列表、删除文件、查看 trace 日志,这些本质上都是通过模组的调试口(通常是 DBG_TXD/DBG_RXD 两个引脚)做的。
一句话总结:Luatools = 烧录器 + 串口调试助手 + 文件管理器 + 日志分析器,四合一。
2.2 macOS 下与开发板之间的依赖链路解析
在 macOS 上使用 Luatools,跟 Windows 最大的不同在于驱动和权限模型。Windows 下,设备厂商通常会提供一个 vcp 驱动安装包,点击安装即可。macOS 内置了大多数常见 USB 串口芯片的驱动,但注意,是“大多数”而不是“全部”。
LuatOS 常用开发板的 USB 转串口芯片主要有这几类:
| 芯片型号 | 厂商 | macOS 内置驱动支持情况 | 常见开发板 |
|---|---|---|---|
| CP2102 | Silicon Labs | 内置支持 | Air780E 开发板早期版本 |
| CP2104 | Silicon Labs | 内置支持 | 官方评估板常见 |
| CH340/CH341 | WCH | 需自行安装官方驱动 | 低端核心板 |
| CH9102 | WCH | 需自行安装官方驱动 | Air780E 新批次 |
我实测下来,CP2102 和 CP2104 在 macOS Sonoma 上插上就能识别,不需要额外操作。CH340 和 CH9102 可能需要去 WCH 官网下载 macOS 驱动,否则系统只能看到设备但不会生成 /dev/tty 节点。这一步卡住的人很多,之后你会看到串口下拉列表是空的,就是这个原因。
权限方面,macOS 对 USB 设备的访问控制比较严格。首次插入开发板时,系统会弹窗询问“是否允许访问 USB 设备”,需要点允许。另外 macOS 对未签名或未公证(notarized)的应用也有 Gatekeeper 限制。Luatools 官方版本应该是做了签名的,但如果你从一些镜像站下载了旧版,首次运行时可能要手动去“系统设置 -> 隐私与安全性”里点“仍要打开”。
整体链路是这样的:
Mac USB 端口 -> USB 线缆 -> 开发板板载 USB 转串口芯片(如 CP2102) -> 模组 DBG 引脚 -> Luatools 通过 /dev/tty.usbmodem 或 /dev/cu.usbmodem 节点访问 -> 完成烧录或日志通信
这条链路里,最容易出问题的是中间两步:驱动识别和权限允许。下文逐一展开。
2.3 为什么坚持用原生工具而不是虚拟机
我知道很多人会说“装个 Windows 虚拟机不就行了,Parallels Desktop 跑 Windows ARM 版,烧录工具照样能用”。确实能用,但我强烈不建议,原因有三个。
第一,稳定性问题。虚拟机里的 USB 设备透传依赖虚拟化软件对 USB 控制器的模拟,在大量数据连续传输(烧录固件就是持续几十秒的密集传输)时,偶尔会出现设备掉线、传输超时。固件写到一半失败,板子变砖的风险可比原生工具高很多。
第二,串口延迟和乱码。LuatOS 的 trace 日志输出是高频率的调试信息,经虚拟机一层中转后,延迟和丢字节的概率都会增加。你排查一个 bug 的时候,看到 trace 日志里出现乱码或断行,很难分清楚是代码问题还是串口链路问题。
第三,资源占用。MacBook 出门在外不一定随时开着虚拟机服务,为了烧个固件专门启动一个 Windows 虚拟机,启动时间、内存占用、风扇噪音,都是实打实的成本。
Luatools for macOS 是官方原生移植,基于 macOS 的 POSIX API 直接操作串口设备,链路短、效率高、稳定。对于每天要烧录几十次固件的开发阶段来说,省下的时间非常可观。
3. macOS 版本 Luatools 的下载安装与权限配置
3.1 官方渠道下载与版本识别
下载渠道只有两个我建议用:合宙官网的下载中心,以及 GitHub 的 Releases 页面。搜索“合宙 Luatools 下载”,找到官网下载中心的“工具”分类,里面会有 Windows 版和 macOS 版的区分,macOS 版后缀通常是 .dmg 或 .zip。GitHub 上合宙的仓库也有 Releases,更新时间更及时。
下载后你会得到一个 dmg 文件,双击挂载,把 Luatools.app 拖进 Applications 文件夹即可。这里有一个 macOS 特有的细节:如果你下载的是 dmg 中的 pkg 安装包格式,安装过程会要求输入管理员密码,这是正常的,代表安装程序会写入 /Applications 目录并可能注册一些系统级的串口权限描述。
安装完成后,建议先去“系统设置 -> 隐私与安全性 -> 辅助功能”里确认 Luatools 是否出现在列表里。如果没有,说明工具本身只需要基本权限;如果出现了但未勾选,且你发现点击“打开串口”没反应,那就要手动勾选。这不是官方文档会写清楚的步骤,但实际操作中碰到的人不少。
3.2 Gatekeeper 与 USB 权限的常见拦路现象
macOS 对新安装应用的管控比你想象的要严格。首次打开 Luatools 时,有可能出现两种情况:
第一种,提示“Luatools”已损坏,无法打开。这个“损坏”往往不是真的损坏,而是下载过程中安全隔离属性(quarantine)导致的。解决办法是打开终端执行xattr -d com.apple.quarantine /Applications/Luatools.app,然后重新打开。这个命令移除了隔离属性,macOS 就不会再拦截了。
第二种,打开后界面正常,但点击下载或烧录按钮没有反应。这时候插入开发板,打开终端输入:
ls /dev/tty.usb* ls /dev/cu.usb*如果能看到类似/dev/tty.usbmodem14201或/dev/cu.usbmodem14201的节点,说明驱动正常。如果看不到,去系统信息里查看 USB 设备树是否识别到开发板:
system_profiler SPUSBDataType如果 USB 树里能看到设备名(比如 Silicon Labs CP2104),但 /dev 下没有 tty 节点,那大概率是驱动没加载。确认一下有没有安装厂商驱动;如果 USB 树里连设备都没有,先检查线材——不同 USB 线缆的数据线芯质量差异很大,有些充电线看起来一样,实际没有数据传输能力,这个细节在 macOS 下尤其容易忽略。
注意一点:插入开发板后 macOS 可能会弹窗“要允许此电脑访问 USB 配件吗?”,这个弹窗很容易被忽略,犹豫几秒就会自动消失,导致后续操作找不到设备。如果遇到设备时有时无的情况,重新插拔一次,盯着屏幕把弹窗点了。
3.3 首次启动的界面结构与关键入口
启动 Luatools 后,主界面布局跟 Windows 版基本一致,左侧是设备操作区(设备型号选择、烧录按钮、日志开关),右侧是大面积的日志输出窗口,底部有连接状态栏。我把几个最常用的功能区域标一下:
- 设备选择下拉框:需要切换到具体的模组型号,比如 Air780E、Air101、Air601,不同型号对应的固件包不同,选错会导致烧录失败。
- 资源下载按钮:用于下载 Lua 脚本到模组,日常开发迭代主要用这个,速度快,几秒钟完成。
- 固件下载按钮:用于烧录底层固件,一般只在升级 SDK 或板子异常恢复时才用。
- trace 开关:打开后实时抓取模组日志,相当于一个专用串口终端。
macOS 版还有一个比较贴心的小功能:菜单栏可以直接看到当前连接的串口号和波特率,不用每个项目都去手动配置。默认波特率对 LuatOS 来说是 921600,保持默认即可,不要动它。
4. 从陌生到熟练:核心烧录实操流程详解
4.1 串口识别、波特率与硬件连接的最优配置
实操开始前先把硬件连接做好。以最常见的 Air780E 开发板为例,用 USB-C 或 Micro USB 线连接 Mac 和开发板。开发板板载的 USB 转串口芯片把模组的 DBG 引脚映射到了 USB,所以不需要额外接 TTL 线,一根 USB 线就够了。
连接后,先打开终端确认串口节点:
ls -la /dev/cu.usbmodem*如果在 Linux 或 Windows 上你习惯用ttyUSB0之类的名称,这里要注意 macOS 的/dev/cu和/dev/tty区别:tty设备用于主动连接,cu设备用于被动监听。Luatools 一般优先用cu设备,因为串口调试场景下工具是主动打开端口的一方。不要奇怪为什么列表里有两个一样的底设备,那是一样的物理口,只是 API 语义不同。
打开 Luatools,确认串口下拉框里选中了正确的串口。如果下拉框是空的,回头查第 2 章的驱动问题。波特率这块,LuatOS 固件下载和日志输出默认都是 921600,这是官方高速下载协议的标准速率,新版 Luatools 会自动匹配,不需要手动设置。如果你只是用第三方的串口助手看日志,才需要手动设成 921600。
4.2 烧录完整过程:从选择型号到成功运行的逐步演示
烧录的核心操作其实就三步:提醒一下,任何一次烧录前,先确认板子的供电是稳定的。直连 Mac USB 口供电即可,但如果你用了 USB Hub,尤其是那种不带独立供电的便携 Hub,烧录过程中有可能因为电压波动导致擦写失败。
第一步,选择型号。在 Luatools 主界面左侧的设备型号下拉框里,选择你的板子对应的模组型号。我以 Air780E 为例。型号选错,固件包不匹配,后续步骤必然出错,而且错得很隐蔽。
第二步,准备好烧录文件。对于纯 Lua 开发模式,一般只需要“资源下载”(也就是脚本下载)。点击“资源下载”按钮之前,先在工具栏里找到“资源包目录”的入口,把编译好的脚本文件(比如 main.lua、devices.lua、soc.lua 等)放到资源包目录里。Luatools 会把这个目录下的所有文件打包下发。也可以直接用资源下载窗口添加文件,界面操作即可。
第三步,点击下载。点击后,Luatools 会对模组发送复位指令(通过串口拉低 DTR/RTS 信号),让模组进入下载模式,然后开始传输。日志窗口会显示进度条。下载完成后会有提示音,日志窗口出现“下载完成”字样。在 Air780E 上,整个 Lua 脚本资源下载一般 5 到 10 秒搞定。
如果是烧录底层固件,过程类似,但要点“固件下载”。固件包通常较大(几百 KB 到几 MB),传输时间更长,期间不要断开 USB 线,不要合上 MacBook 盖子进入睡眠——睡眠会使 USB 挂起,设备节点消失,烧录直接中断。
4.3 芯片流控开关与 BOOT 按键的避坑经验
这是我在实操中踩过最深的一个坑,必须单独讲。
Luatools 的串口设置里有一个“芯片流控”开关,有的版本叫“流控控制”或“RTS/DTR 流控”。这个参数决定工具是否会通过串口的 RTS 和 DTR 信号线来控制模组的 EN(使能)和 BOOT(下载模式)引脚。
对 Air780E 这类带 USB 转串口芯片的开发板,流控开关一定要打开。因为开发板上的 CP2102 芯片的 RTS 引脚接到了模组的 BOOT 引脚,DTR 引脚接到了模组的 EN 引脚。Luatools 在烧录前会抓住这两个信号线,自动控制模组进入下载模式,不需要你手动按 BOOT 按键。这个设计极大提升了烧录体验。
但如果你用的是自制的核心板,只引出了模组的 TX、RX、GND、VCC,没有把 RTS、DTR 引线,那就要把芯片流控关闭,烧录时手动按住 BOOT 按键(或者短接 BOOT 引脚到 GND)再上电,才能进入下载模式。
具体判断方法:
- 如果烧录时 Luatools 提示“等待设备进入下载模式”或一直卡在 0%——多半是流控不匹配。
- 默认勾选“芯片流控”,如果烧录超时,取消勾选再试一次,反之亦然。
- 手动进入下载模式的操作顺序是:按住 BOOT 不放 -> 按一下 RST -> 松开 BOOT,然后再点击烧录。
这个坑在官方文档里写得不显眼,但实际遇到的人特别多,尤其是那些喜欢自己画板子的玩家。建议在每次烧录用的是不同硬件时,先花三秒钟想一下:这块板子的 RTS 和 DTR 有没有真正连到模组的 BOOT 和 EN 上?
4.4 固件文件不匹配时的现象与处理
另一个高频问题是固件选错。Luatools 的固件下载功能是通用的,你可以手动浏览并选择任何 .bin 或 .pac 文件。如果你下载了别的型号的固件包,或者下载了 SDK 包但直接选了里面的某个碎文件而不是打包生成的完整固件文件,烧录时可能出现:
- 烧录过程中突然报错“文件校验失败”
- 烧录完成但模组无限重启,串口日志大量乱码
- 烧录完成但设备完全黑屏无法唤醒
处理方式:去官网对应型号的 SDK 发布页面,下载适配该型号、该 LuatOS 版本固件包。通常固件包名称里会标明型号和版本,比如Air780E_LuatOS_Release_xxx.pac或.bin。直接用这个完整包烧录,不要手动拆分。
如果已经烧录了错误固件导致整个板子不工作,也别慌。多数 LuatOS 模组都有底层引导程序保护,重复进入下载模式重新烧录正确固件即可恢复。具体方法是:先按住 BOOT,再按一下 RST 松开,保持 BOOT 几秒,然后点 Luatools 的烧录按钮。如果还不行,检查 USB 是否被系统识别,关掉其他占用该串口的程序,再试。
5. 串口调试:把 Mac 变成你的 LuatOS 开发助手
5.1 Luatools 内建 trace 功能与第三方工具的取舍
烧录只是第一步,开发过程中更频繁的需求是看日志。Luatools 自带 trace 日志窗口,点击工具栏的 trace 开关,它就会监听当前选中串口的所有输出,实时显示在右侧日志区,并且支持按关键词过滤、暂停滚动、导出到文件。
对于日常写 Lua 逻辑调试,内建 trace 已经够用。但当你调试的模块涉及复杂协议,比如 MQTT 报文、TCP 长连接、低功耗唤醒时序,Luatools 的 trace 窗口就略显粗糙了。这时可以搭配专门的串口工具使用。
macOS 上的串口调试工具,我实际用过且推荐的有这几个:
| 工具名称 | 开源/收费 | 优势 | 不足 |
|---|---|---|---|
| Serial Studio | 开源免费 | 支持 JSON/CSV 可视化,协议解析 | 配置略复杂 |
| CoolTerm | 免费 | 操作直观,支持脚本控制 | 界面语言只有英文 |
| minicom | 开源(终端) | 零 GUI 依赖,稳定 | 配置繁琐,无日志图表 |
| 内建 trace | 随工具附赠 | 直接与烧录联动 | 无时间戳等高级功能 |
我个人的习惯是:日常开发用内建 trace,因为烧录完成后直接在同一个窗口看输出,不用切换工具。如果遇到需要对比不同时段的日志,或者要把日志发给同事分析时,就用 CoolTerm 导出带时间戳的完整流水,这样定位问题时效率高很多。
5.2 常用 Lua 调试指令:打印日志与设备信息获取
在 LuatOS 环境下,最常用的调试手段就是log.info()函数。在 Lua 脚本里写:
log.info("This is a info log", "device id:", mcu.unique_id())这段代码会在 trace 窗口输出设备的唯一 ID 等运行信息。日志级别不只是 info,还有 debug、warn、error 等:
log.debug("debug log") log.info("info log") log.warn("warn log") log.error("error log")默认 trace 窗口会过滤掉 debug 级别以下的日志,只在 debug 模式显示。如果你没有看到正在打印的日志,检查两点:一是不是消息级别低于过滤阈值,二是有没有打开 trace 开关。
另外,获取系统信息最常用的几个 API:
-- 查看固件版本 log.info("version", rtos.version()) -- 查看设备唯一 ID log.info("unique id", mcu.unique_id()) -- 查看当前是否连上网络 log.info("net", socket.getInfo() or "no net")这些都是即时信息,配合 trace 窗口使用,排查问题非常快。比如怀疑某段代码没执行,就在那段代码前加一行log.info("dbg", "line xxx reached"),看 trace 是否打印。这种“脚本即插即用”的调试方式,比传统嵌入式编译-烧录-调试的循环快一个量级。
5.3 串口日志乱码、日志丢失与中文输出问题的解决思路
Mac 用户用串口调试时,乱码问题出现率比 Windows 高,因为 macOS 的终端生态默认偏好 UTF-8,而有些旧的固件版本默认输出 GBK 编码。
如果你发现 trace 窗口里中文变成了一堆???或乱码,先确认 Luatools 日志窗口的编码设置,有没有像 UTF-8、GBK 这样的选项。LuatOS 官方近期默认输出就是 UTF-8,如果你的固件是几年前的版本,建议升级或转换编码接口。
还有一类情况是日志丢失或突然中断,特别是在高波特率下。这通常是因为电脑端处理不过来,或串口缓冲区溢出。macOS 对 USB 串口的缓冲管理不算激进,数据量大的时候,某一段日志被丢弃是正常现象。对策是:降低 log 输出频率(不要写无脑的 for 循环打日志),或者关闭不必要的高频日志模块。还有一种实用的手法是在关键节点打慢速日志,每 1 到 2 秒一条,极大避免丢日志。
如果怀疑串口缓冲区溢出,可以用 CoolTerm 的Buffer Size设置调大接收缓冲区,实测对传输大量日志场景有帮助。
5.4 通过 trace 日志定位 MQTT 连接失败等疑难问题
讲一个实际案例。有一次我在 Air780E 上调试 MQTT 连接,一直失败,代码层面反复检查了 endpoint、clientID、username、password,都确认无误。Luatools 内建 trace 窗口显示的日志只有mqtt error,信息量太少。
我换成 CoolTerm 打开同一串口,波特率 921600,连接后重新运行,完整看到了底层的错误码:MQTT_CONNECT_FAILED ## error code: -7。查了 LuatOS 的 MQTT 库文档,-7 对应的是服务器返回的连接认证失败。再仔细一看,我把账号密码填错了。这类问题如果只看内建 trace 的简洁摘要,很容易绕弯路。
这类排查思路总结起来就是:内建 trace 适合看“发生了什么”,第三方串口工具适合看“为什么发生”。尤其是在通信协议层,底层日志往往会被框架层包含或简化,只有直接监听原始串口输出才能看到完整信息。
6. 常见问题速查:把踩过的坑一次性填平
这一节直接上干货,把我在 Mac 上使用 Luatools 遇到的问题和对应的解法整理成清单,按危害程度排序。
| 问题现象 | 根本原因 | 解决方案 |
|---|---|---|
| 串口下拉列表为空 | 驱动未加载或权限未允许 | 检查 system_profiler SPUSBDataType,确认设备被识别;安装厂商驱动;重新插拔后留意弹窗 |
| 烧录进度条一直 0% | 芯片流控开关不匹配 | 切换“芯片流控”勾选状态;手动按 BOOT+RST 进入下载模式 |
| 烧录中途断开报错 | 线材质量差或供电不足 | 换高质量带数据线的 USB 线;直接连接 Mac 口,不用无源 Hub |
| 下载完成后板子无法启动 | 固件与型号不匹配 | 下载官方对应型号完整固件包重新烧录;按住 BOOT+RST 恢复 |
| 日志全是乱码 | 编码格式不一致 | 切换日志窗口编码;升级固件到支持 UTF-8 的版本 |
| trace 窗口无输出 | 未打开 trace 开关或串口被其他程序占用 | 确认开关状态;关闭其他串口工具后重试 |
| 打开 App 提示“已损坏” | Gatekeeper 隔离属性 | 执行xattr -d com.apple.quarantine /Applications/Luatools.app |
| 烧录过程 MacBook 睡眠中断 | 系统自动睡眠策略 | 使用caffeinate -d防止系统睡眠,或在系统设置中临时关闭自动睡眠 |
这里面我想特别展开一下最后一条。macOS 的默认电源策略是“使用电池时多少分钟无操作进入睡眠”,开发时你盯着板子看进度条,键盘鼠标一直没动,系统就误判你离开了。最稳妥的办法是烧录前在终端先运行:
caffeinate -d这个进程会在后台运行,直到你按 Ctrl+C 结束。它的作用就是阻止系统进入睡眠,虽然不是永久的,但足够覆盖一次固件烧录的时间。别忘了烧完把它退掉。
还有一个小技巧:如果你的 Mac 是 Apple Silicon 芯片(M1/M2/M3),打开 Luatools 时注意一下活动监视器里的“种类”列,如果显示是 “Intel”,说明你下载的是 x86 版本,通过 Rosetta 2 转译运行。这种情况串口功能也能用,但可能存在轻微的兼容性问题。合宙目前提供了 Apple Silicon 原生版本,优先下载带 arm64 字样的版本,在性能上更稳妥,也避免了个别 USB 驱动兼容性 bug。
另外一个高频困惑是关于固件版本号的。很多人烧录后不知道当前固件是什么版本,在 Lua 环境里调用:
log.info("version", rtos.version())即可获得版本信息。如果烧录了几次都没变化,请确认烧录按钮是否点了“固件下载”而不是“资源下载”——这两个按钮功能完全不同,资源下载只是覆盖文件系统里的脚本,不会动固件分区。我见过不少人在“资源下载”里放了一个自以为是的固件包,结果版本号永远不变,还以为工具坏了。
7. 一些实际使用中的心得体会
从 Windows 切到 Mac 上做 LuatOS 开发,一开始确实有一段阵痛期。但用惯 Luatools for macOS 之后,我再也不愿意回 Windows 去开虚拟机烧固件了。它的原生串口栈、稳定的传输速率、干净的 UI,都让我觉得这是一个值得花时间熟悉的工作流。
最后聊几个零碎但很实用的小经验。
一个是要养成烧录前检查“串口号变了没有”的习惯。macOS 下每次重新插拔 USB 设备,串口节点名可能保持不变,比如/dev/cu.usbmodem14201,其中 14201 是序列号相关的一段数字。但如果你换了 USB 口或者换了开发板,数字会变。连接不上时先看这个节点存不存在,能省很多排查时间。
另一个是关于日志导出的。Luatools 的 trace 窗口支持复制选中文本,但如果你需要完整的、带时间对齐的日志流,建议直接用 CoolTerm 的 capture to file 功能。我通常会把一次完整的 MQTT 连接过程日志导出为 txt 文件,用 VS Code 打开搜索关键词,比在工具界面里肉眼扒拉高效太多。
最后一个建议是给刚入门的朋友的:不要把 Luatools 当做一个“烧完就跑”的工具。花一点时间把它的资源下载目录、固件保存目录、trace 过滤规则搞清楚,你会在日常开发中节省非常多的时间。尤其是资源下载的目录管理,养成“一个项目一个资源目录”的习惯,换项目时不会把脚本弄混。
在 Mac 上玩 LuatOS,工具链已经不再是拦路虎。剩下的,就是享受写 Lua 脚本、实时看日志、快速迭代的乐趣了。