什么是 LuatOS "固件"?
在 LuatOS 生态中,固件(firmware)就是烧录到模组芯片中、让硬件"跑起来"的那一套底层软件。
固件好比是手机的出厂操作系统(比如 iOS 或 Android)。手机硬件出厂时就已经装好了系统,你拿到手机后只需要安装 App(Lua 脚本)就可以使用了。
在 LuatOS 里,固件 = 操作系统,你的 Lua 脚本 = App。
固件的文件命名规则
固件文件以.soc为后缀,命名格式如下:
LuatOS-SoC_<版本号>_<模组型号>_<编号>.soc举例说明:
| 固件文件名 | 含义 |
|---|---|
LuatOS-SoC_V2018_Air780EPM_104.soc | V2018 版本、Air780EPM 模组、104号固件 |
LuatOS-SoC_V2016_Air8101_104.soc | V2016 版本、Air8101 模组、104号固件 |
LuatOS-SoC_V2008_Air8000_1.soc | V2008 版本、Air8000 模组、1号固件 |
固件里包含什么?
一个 LuatOS 固件由 5 层组成:
┌──────────────────────────┐ │ Lua 标准库 │ ← 字符串、表、数学运算等原生 Lua 功能 │ LuatOS 核心库 │ ← mqtt、http、gpio、uart、lcd 等硬件驱动库 │ Lua 虚拟机 (Lua VM) │ ← 执行 Lua 脚本的运行环境 │ LuatOS 适配层 │ ← 适配不同芯片的桥梁 │ 主芯片系统平台 (FreeRTOS) │ ← 底层的实时操作系统(未开源) └──────────────────────────┘其中,用户二次开发最关心的是上两层—— Lua 标准库 + LuatOS 核心库(gpio、uart、mqtt、lcd 等)。
为什么同一模组有不同编号的固件(如 1号、103号、104号)?
是因为不同编号的固件内置了不同的核心库组合,这是由模组的硬件资源(Flash/RAM 大小)决定的。
以 Air780EPM 为例,104号固件相比 1号固件:
- ✅多了:libgnss(定位)、little_flash(SPI Flash)、otp(安全存储)、fft(傅里叶变换)
- ❌少了:camera(摄像头)、lcd(显示屏)、eink(墨水屏)、tp(触摸)、u8g2
- 脚本区大小:368KB(104号) vs 256KB(1号)
104 属于64位固件(101-199号),1号属于32位固件(1-99号)。
固件和用户脚本的关系
┌──────────────┐ 烧录 ┌──────────────────┐ │ 固件(.soc) │ ─────────→ │ 模组芯片 │ │ (操作系统) │ │ (手机硬件) │ └──────────────┘ └──────────────────┘ ↑ ┌──────────────┐ ┌────┴──────┐ │ Lua 脚本 │ ───────────→ │ 运行你的 │ │ (你的 App) │ 下载到 │ 业务逻辑 │ │ main.lua │ 文件系统 └───────────┘ └──────────────┘工作流程:
- 先给模组烧录一个固件(相当于装好操作系统)
- 再通过 Luatools 工具把你的 Lua 脚本下载到模组的文件系统中
- 上电后,固件中的 Lua 虚拟机就会执行你的 Lua 脚本
LuatOS 固件 = "为特定模组定制的、内置了硬件驱动和 Lua 运行环境的嵌入式操作系统镜像文件",用户只需编写 Lua 脚本作为"应用程序"在其上运行,无需关心底层芯片细节。
Air8101固件的含义
1.基本信息
- 固件版本:
V2018(LuatOS-SoC_V2018_Air8101) - 固件下载:LuatOS-SoC_V2018_Air8101
- Demo 源码:LuatOS-Air8101
- 发布日期:2026.07.07
2.104号固件支持的核心功能
| 功能 | 支持情况 |
|---|---|
| airUI 人机交互界面 | ✅ |
| camera(USB/DVP 摄像头拍照+大图解码) | ✅ |
| BLE 蓝牙 | ✅ |
| airlink 设备间通讯 | ✅ |
| audio 音频 | ✅ |
| hzfont 字库 | ✅ |
| TF 卡(fatfs) | ✅ |
| videoplayer 视频播放 | ✅(V2014起支持) |
| lcd JPG 解码 | ✅(V2018起支持) |
| 加密库(crypto/gmssl) | ✅ |
| 触摸屏(tp) | ✅ |
| FOTA 固件升级 | ✅ |
总而言之,Air8101 的 V2018 版本 104号固件是一个以UI(AirUI)操作功能为核心的固件版本,同时集成了摄像头拍照、蓝牙、音频、TF卡存储等功能,适用于需要图形界面交互场景的开发。
3.常见固件对比
| 对比项 | LuatOS-SoC_V2016_Air8101_104 | LuatOS-SoC_V2018_Air780EPM_104 |
|---|---|---|
| 目标模组 | Air8101(WiFi 模组,主打 UI 显示) | Air780EPM(4G Cat.1 蜂窝模组,主打 IoT 通信) |
| 固件版本 | V2016 | V2018(较新) |
| 架构 | 64位固件(101-199号) | 64位固件(101-199号) |
| 脚本区 | 512KB | 368KB |
| 文件系统 | 1752KB | 168KB |
| 运行内存(RAM) | 1.5MB(用户可用 Lua 内存约 2MB) | 较小(未明确标注,但远小于 Air8101) |
核心功能定位差异
Air8101 的 104 号固件→以 UI 图形界面开发为核心
- ✅airUI— 基于 LVGL 9.4 的图形化开发核心库(104号首次新增!)
- ✅camera— USB/DVP 摄像头拍照+大图片解码
- ✅lcd— 显示屏驱动
- ✅tp— 触摸屏
- ✅hzfont— 矢量字库
- ✅audio— 音频多媒体
- ✅SIP 通话
- ✅wlan— WiFi 网络
- ✅ble— 蓝牙
- ✅videoplayer— 视频播放(V2014 起支持)
- ❌不支持fft、protobuf、xxtea、iconv、u8g2
Air780EPM 的 104 号固件→以 4G 蜂窝通信和物联网为核心
- ✅mobile— 蜂窝通信(4G Cat.1)
- ✅libgnss— GNSS 定位
- ✅otp— 一次性可编程存储
- ✅little_flash— SPI Flash 驱动
- ✅fft— 快速傅里叶变换
- ✅ 标准 IoT 通信库:mqtt、http、socket、ftp、websocket
- ✅ 标准外设:uart、spi、i2c、gpio、pwm、adc、can
- ❌不支持camera、lcd、tp、u8g2、eink、audio、SIP、ble、wlan、airUI
| 固件 | 用途 |
|---|---|
| V2016_Air8101_104 | 适合带屏幕的 UI 交互设备(如智能面板、HMI 人机界面),有摄像头、触摸屏、WiFi、蓝牙、音频、矢量字库等全套多媒体/显示能力 |
| V2018_Air780EPM_104 | 适合4G 物联网数据采集与通信设备(如远程监测、定位追踪),有 4G 联网、GNSS 定位、OTP 安全存储,但基本无 UI 显示能力 |
简单说:Air8101 的 104 号是"显示+交互"型,Air780EPM 的 104 号是"通信+数据"型,两者面向完全不同的应用场景。
项目管理
一个完整的 LuatOS 项目 = 内核固件 + 脚本和资源文件
Luatools 项目管理界面的配置分为两大块:
┌─────────────────────────────────────────────┐ │ ① 内核固件(底层CORE) ← 选择 .soc 文件 │ │ │ │ ② 脚本和资源列表(Script) ← 本问题的重点 │ │ ├── 用户脚本文件(必须) │ │ ├── 资源文件(可选) │ │ └── lib脚本文件(可选) │ │ │ │ ③ ☑ 添加默认lib(推荐勾选) │ └─────────────────────────────────────────────┘具体需要导入的文件
1️⃣ 用户脚本文件(必须)
你自己编写的.lua文件,核心通常是main.lua(程序入口),以及其他自定义的.lua模块文件。
| 文件 | 说明 |
|---|---|
main.lua | 必备入口文件,LuatOS 启动后最先执行此文件 |
xxx.lua | 你的业务逻辑模块,通过require("xxx")引用 |
💡 可以从合宙官方 Demo 仓库下载:LuatOS: Powerful embedded Lua Engine for loT devices, withmany components - Gitee.com
2️⃣ 资源文件(可选)
除了.lua脚本之外的所有其他文件,例如:
| 文件类型 | 示例 |
|---|---|
| 图片 | logo.png、icon.jpg |
| 音频 | alarm.mp3、ring.wav |
| 文本 | config.txt、readme.md |
| 其他 | 字体文件、证书文件等 |
这些文件会被下载到模组的文件系统中,供脚本运行时读取。
3️⃣ lib 脚本文件(可选,推荐用默认)
有两种方式处理 lib 脚本:
| 方式 | 操作 |
|---|---|
| ✅推荐:勾选"添加默认lib" | Luatools 自动匹配与当前固件对应的官方 lib 库,省心省力 |
| 手动指定 | 点击"添加文件"选择你自己准备的 lib 脚本文件 |
建议始终勾选"添加默认lib",除非你有特殊的定制 lib 需求。
操作步骤总结
1. 创建项目
2. 选择底层固件(.soc 文件) ← 内核固件
3. 点击"脚本和资源列表"的添加按钮
├── 添加 main.lua ← 用户脚本(必须)
├── 添加 其他 .lua 文件 ← 用户脚本(可选)
└── 添加 图片/音频等资源文件 ← 资源文件(可选)
4. 勾选 ☑ "添加默认lib" ← 自动使用官方 lib
5. 点击 "下载底层和脚本" 或 "下载脚本"
底层Core:Lua开发的底层Core
增加脚本或资源文件:添加用户脚本、数据及Lib库
默认USB打印trace,trace三个选项是用来选择打印输出方式的
添加默认lib:不建议勾选
升级文件包含core:用于项目打包,可按需选择
升级文件包含脚本:用于项目打包,建议直接勾选
升级文件无资源文件:用于项目打包,不选
USB BOOT下载:使用Boot模式下载
下载脚本:只下载脚本列表中的数据
下载底层和脚本:底层core和脚本列表中的数据都下载
语法检查:单独检查用户编写的脚本有无语法错误
(注意:首次下载时,强烈建议直接下载底层和脚本)
常见问题
1.提示缺少库文件
点击确认后,会提示缺少的具体脚本文件