# Meshtastic 固件项目目录结构 > 本文档描述 Meshtastic 固件仓库的完整目录层级及各文件夹用途。 ## 顶层目录 ``` meshtastic_firmware/ ├── src/ # 固件核心 C++ 源码(见下详述) ├── variants/ # 200+ 硬件变体定义,按芯片平台分子目录 │ ├── esp32/ # ESP32(原版) │ ├── esp32c3/ # ESP32-C3 │ ├── esp32c6/ # ESP32-C6 │ ├── esp32p4/ # ESP32-P4 │ ├── esp32s2/ # ESP32-S2 │ ├── esp32s3/ # ESP32-S3 │ ├── nrf52840/ # Nordic nRF52840 │ ├── nrf54l15/ # Nordic nRF54L15 │ ├── rp2040/ # Raspberry Pi RP2040 │ ├── rp2350/ # Raspberry Pi RP2350 │ ├── stm32/ # STM32WL │ └── native/ # Linux/macOS Portduino 仿真 ├── boards/ # PlatformIO 自定义板级 JSON 定义(75+ 开发板) ├── test/ # 原生 C++ 单元测试(19 个测试套件) │ ├── fixtures/ # 测试数据/固件 │ └── support/ # 测试辅助代码 ├── bin/ # 构建/CI/发布脚本(run-tests.sh, regen-protos.sh, build-*.sh…) ├── protobufs/ # .proto 子模块(从 meshtastic/protobufs 拉取) ├── .github/ # GitHub 配置 │ ├── workflows/ # CI/CD 流水线 │ ├── prompts/ # Copilot 固件脚手架提示词 │ ├── copilot-instructions.md # AI Agent 主指令文档(最重要) │ ├── ISSUE_TEMPLATE/ # Issue 模板 │ └── actions/ # 复用的 GitHub Actions ├── .trunk/ # Trunk 代码格式化/静态检查配置 ├── .claude/ # Claude Code 配置(PostToolUse hook 等) ├── .devcontainer/ # VS Code Dev Container 定义 ├── .clusterfuzzlite/ # ClusterFuzzLite 模糊测试配置 ├── .vscode/ # VS Code 工作区设置 ├── extra_scripts/ # PlatformIO 构建钩子脚本(按平台链接器/LTO 等) ├── scripts/ # 额外构建脚本(mbedtls 源码添加) ├── tools/ # 独立工具(lockdown 配置脚本) ├── monitor/ # 串口监控辅助脚本 ├── docs/ # 设计文档(路由、信标模块等) ├── branding/ # 品牌资源说明 ├── release/ # 发布产物输出目录(gitignore) ├── data/static/ # 打包进文件系统的静态资源 ├── meshtestic/ # 测试相关(当前为空) ├── managed_components/ # PlatformIO 自动管理的依赖组件 ├── zephyr/ # Zephyr RTOS 适配(实验性) ├── debian/ # Debian 打包文件 ├── .dummy/ # 占位/空组件 ├── platformio.ini # PlatformIO 主构建配置(所有环境定义) ├── Dockerfile # 主 Docker 构建 ├── Dockerfile.test # 测试用 Docker ├── docker-compose.yml # Docker Compose ├── .mcp.json # MCP 服务器注册(meshtastic-mcp,uvx 启动) ├── AGENTS.md # Agent 快速参考指令 ├── CLAUDE.md # Claude Code 指令镜像 ├── userPrefs.jsonc # 设备用户偏好配置(测试会话状态) ├── version.properties # 版本号定义 ├── partition-table*.csv # 各平台分区表 ├── sdkconfig.defaults # ESP-IDF 默认配置 └── *.ld / *.hex / *.uf2 # 链接脚本、引导加载程序、softdevice ``` ## `src/` 源码内部结构 ### 顶层文件 | 文件 | 用途 | | --- | --- | | `main.cpp` / `main.h` | 固件入口 | | `meshUtils.*` | 通用工具函数(clamp、UTF-8、字符串格式化等) | | `Observer.*` | 观察者模式 / 事件总线 | | `PowerFSM.*` | 电源状态机 | | `Power.*` / `PowerMon.*` | 电源管理与监控 | | `RedirectablePrint.*` | 可重定向日志输出 | | `SerialConsole.*` | 串口控制台 | | `sleep.*` | 睡眠管理 | | `SafeFile.*` | 安全文件读写 | | `FSCommon.*` | 文件系统通用操作 | | `GpioLogic.*` | GPIO 逻辑 | | `MessageStore.*` | 消息存储 | | `SPILock.*` | SPI 总线锁 | | `xmodem.*` | XModem 协议 | | `airtime.*` | 发射占空比统计 | | `memGet.*` | 内存查询 | | `configuration.h` | 全局配置 | | `DebugConfiguration.*` | 调试日志宏(LOG_DEBUG/INFO/WARN…) | | `RF95Configuration.h` | RF95 射频配置 | ### 子目录 ``` src/ ├── mesh/ # 核心网络层(最重要) ├── modules/ # 功能模块 ├── platform/ # 平台抽象层 ├── graphics/ # 显示与 UI ├── input/ # 输入设备 ├── gps/ # GPS 定位 ├── motion/ # 运动传感器 ├── mqtt/ # MQTT 网关 ├── nimble/ # NimBLE 蓝牙低功耗 ├── concurrency/ # 并发原语 ├── security/ # 安全功能 ├── serialization/ # 序列化 ├── detect/ # 硬件检测 ├── buzz/ # 蜂鸣器反馈 ├── watchdog/ # 看门狗定时器 ├── power/ # 电源管理 └── memory/ # 内存审计工具 ``` --- ### `src/mesh/` — 核心网络层 | 文件/目录 | 用途 | | --- | --- | | `generated/` | ⚠️ 自动生成的 protobuf 绑定(**禁止手动编辑**) | | `api/` | 设备 API 抽象 | | `eth/` / `http/` / `udp/` / `wifi/` / `raspihttp/` | 网络传输后端 | | `NodeDB.*` | 节点数据库(对等节点表) | | `NodeDBLegacyMigration.cpp` | 旧版节点数据库迁移 | | `Router.*` | 路由基类 | | `FloodingRouter.*` | 泛洪路由 | | `ReliableRouter.*` | 可靠路由 | | `NextHopRouter.*` | 下一跳路由 | | `CryptoEngine.*` | 加密引擎(AES-CTR 信道加密 + X25519 PKI) | | `aes-ccm.*` | AES-256-CCM(DM 加密) | | `Channels.*` | 信道管理(PSK) | | `RadioInterface.*` | 射频接口基类 | | `RadioLibInterface.*` | RadioLib 统一接口 | | `RadioLibRF95.*` | RF95 RadioLib 适配 | | `RF95Interface.*` | RF95/SX1276 射频驱动 | | `SX126xInterface.*` | SX1262/SX1268 射频驱动 | | `SX128xInterface.*` | SX1280 射频驱动 | | `LR11x0Interface.*` | LR1110/LR1120/LR1121 射频驱动 | | `LR20x0Interface.*` | LR2021 射频驱动 | | `LLCC68Interface.*` | LLCC68 射频驱动 | | `STM32WLE5JCInterface.*` | STM32WLE5JC 射频驱动 | | `LoRaFEMInterface.*` | LoRa 前端模块控制 | | `PhoneAPI.*` | 手机通信协议 | | `StreamAPI.*` | 串线通信协议 | | `StreamFrameWriter.*` | 流帧写入器 | | `MeshService.*` | Mesh 服务主循环 | | `MeshModule.*` | 模块框架基类 | | `ProtobufModule.*` | Protobuf 模块基类 | | `SinglePortModule.h` | 单端口模块基类 | | `MeshPacketQueue.*` | 数据包队列 | | `PacketCache.*` | 数据包缓存 | | `PacketHistory.*` | 数据包历史(去重) | | `TransmitHistory.*` | 发射历史 | | `PositionPrecision.*` | 位置精度控制 | | `TypeConversions.*` | protobuf 类型转换 | | `WarmNodeStore.*` | 暖存储(睡眠中保持节点缓存) | | `Throttle.*` | 限流工具(替代 raw `millis()`,防溢出) | | `HardwareRNG.*` | 硬件随机数生成 | | `MeshTypes.h` / `MeshRadio.h` | 核心类型定义 | | `mesh-pb-constants.*` | protobuf 常量 | | `Default.*` | 默认值 | | `MemoryPool.h` / `PointerQueue.h` / `TypedQueue.h` / `StaticPointerQueue.h` | 内存池与队列模板 | | `InterfacesTemplates.cpp` | 接口模板 | --- ### `src/modules/` — 功能模块 | 文件/目录 | 用途 | | --- | --- | | `AdminModule.*` | 远程管理 | | `PositionModule.*` | 位置上报 | | `TextMessageModule.*` | 文本消息 | | `RoutingModule.*` | 路由 | | `TraceRouteModule.*` | 路由追踪 | | `NeighborInfoModule.*` | 邻居信息 | | `NodeInfoModule.*` | 节点信息 | | `StoreForwardModule.*` | 存储转发 | | `ExternalNotificationModule.*` | 外部通知 | | `CannedMessageModule.*` | 预设消息 | | `AtakPluginModule.*` | ATAK 插件 | | `RemoteHardwareModule.*` | 远程 GPIO 控制 | | `RangeTestModule.*` | 距离测试 | | `ReplyBotModule.*` | 自动回复机器人 | | `ReplyModule.*` | 回复模块 | | `KeyVerificationModule.*` | PKI 密钥验证 | | `HopScalingModule.*` | 跳数缩放 | | `TrafficManagementModule.*` | 流量管理 | | `MeshBeaconModule.*` | Mesh 信标 | | `WaypointModule.*` | 路径点 | | `DetectionSensorModule.*` | 检测传感器 | | `DropzoneModule.*` | 空投区 | | `StatusLEDModule.*` | 状态 LED | | `StatusMessageModule.*` | 状态消息 | | `OnScreenKeyboardModule.*` | 屏幕键盘 | | `PowerStressModule.*` | 电源压力测试 | | `SystemCommandsModule.*` | 系统命令 | | `SerialModule.*` | 串口模块 | | `GenericThreadModule.*` | 通用线程模块 | | `esp32/` | ESP32 专用模块 | | `Telemetry/` | 遥测模块(见下) | | `Modules.*` / `ModuleDev.h` | 模块注册与开发辅助 | #### `src/modules/Telemetry/` — 遥测 | 文件/目录 | 用途 | | --- | --- | | `BaseTelemetryModule.h` | 遥测模块基类 | | `DeviceTelemetry.*` | 设备遥测(电池/电压/信道利用率等) | | `EnvironmentTelemetry.*` | 环境遥测(温湿度/气压等) | | `HealthTelemetry.*` | 健康遥测(心率等) | | `PowerTelemetry.*` | 电源遥测 | | `AirQualityTelemetry.*` | 空气质量遥测 | | `HostMetrics.*` | 主机指标(Linux 原生) | | `UnitConversions.*` | 单位转换 | | `Sensor/` | 50+ I2C 传感器驱动 | --- ### `src/platform/` — 平台抽象层 | 目录 | 用途 | | --- | --- | | `esp32/` | ESP32 专用(OTA、加密引擎、内存分配器、MCP23017 IO 扩展) | | `nrf52/` | nRF52 专用(蓝牙 DFU、加密引擎、softdevice、hardfault 处理) | | `nrf54l15/` | nRF54L15 专用 | | `portduino/` | Linux/macOS 仿真(GPSD 串口、模拟电台、USB HAL、wasm) | | `rp2xx0/` | RP2040/RP2350 | | `stm32wl/` | STM32WL | | `extra_variants/` | 额外变体支持 | --- ### `src/graphics/` — 显示与 UI | 文件/目录 | 用途 | | --- | --- | | `Screen.*` / `ScreenGlobals.*` | 屏幕主控 | | `draw/` | 绘图工具 | | `fonts/` | 字体资源 | | `img/` | 图像资源 | | `emotes.*` / `EmoteRenderer.*` | 表情符号渲染 | | `EInk*.*` | 电子墨水屏驱动(多种型号) | | `TFT*.*` | TFT 彩屏驱动 | | `tftSetup.cpp` / `TFTPalette.h` / `TFTColorRegions.*` | TFT 配置与调色板 | | `VirtualKeyboard.*` | 虚拟键盘 | | `SharedUIDisplay.*` | 共享 UI 显示 | | `ScreenFonts.h` / `TimeFormatters.*` | 字体与时间格式化 | | `images.h` / `PointStruct.h` | 图像与点结构定义 | | `niche/` | 小众显示方案 | | `NomadStarLED.h` | LED 灯阵 | | `Panel_sdl.*` | SDL 面板(仿真) | | `GxEPD2Multi.h` | GxEPD2 多屏支持 | --- ### `src/input/` — 输入设备 支持多种输入方式(64 个文件): | 类别 | 文件 | | --- | --- | | 用户按键 | `ButtonThread.*` | | I2C 键盘 | `BBQ10Keyboard.*`、`cardKbI2cImpl.*`、`kbI2cBase.*`、`MPR121Keyboard.*`、`TCA8418Keyboard.*` | | 板载键盘 | `CardputerKeyboard.*`、`TLoraPagerKeyboard.*`、`TDeckProKeyboard.*`、`HackadayCommunicatorKeyboard.*` | | 旋钮编码器 | `RotaryEncoderInterruptBase.*`、`RotaryEncoderInterruptImpl1.*`、`SeesawRotary.*` | | 五向开关 | `ExpressLRSFiveWay.*`、`UpDownInterruptBase.*` | | 轨迹球 | `TrackballInterruptBase.*`、`TrackballInterruptImpl1.*` | | 触摸屏 | `TouchScreenBase.*`、`TouchScreenImpl1.*` | | Linux 输入 | `LinuxInput.*`、`LinuxInputImpl.*`、`LinuxJoystick.*` | | 矩阵键盘 | `kbMatrixBase.*`、`kbMatrixImpl.*` | | I2C 按钮 | `i2cButton.*` | | 触觉反馈 | `HapticFeedback.*` | | 串口键盘 | `SerialKeyboard.*`、`SerialKeyboardImpl.*` | | 输入代理 | `InputBroker.*` | --- ### 其他子目录 | 目录 | 用途 | | --- | --- | | `gps/` | GPS 定位(`GPS.*`、`RTC.*`、`GeoCoord.*`、`NMEAWPL.*`、`GPSUpdateScheduling.*`) | | `motion/` | 运动传感器(加速度计/磁力计:BMA423、BMI270、BMM150、BMX160、ICM20948、ICM42607P、LIS3DH、LSM6DS3、MPU6050、QMA6100P、STK8XXX、MMC5983MA) | | `mqtt/` | MQTT 网关(`MQTT.*`、`ServiceEnvelope.*`) | | `nimble/` | NimBLE 蓝牙低功耗 | | `concurrency/` | 并发原语(线程/锁/信号量,FreeRTOS + POSIX 双实现、`NotifiedWorkerThread`、`InterruptableDelay`) | | `security/` | 安全功能(加密存储 `EncryptedStorage.*`、AP 保护 `APProtect.*`、锁定显示 `LockdownDisplay.*`、安全清零 `SecureZero.h`) | | `serialization/` | 序列化(COBS 编码 `cobs.*`、MeshPacket 序列化 `MeshPacketSerializer.*`) | | `detect/` | 硬件检测(I2C 扫描 `ScanI2C*`、e-ink 检测 `einkScan.h`、LoRa 射频类型检测 `LoRaRadioType.h`) | | `buzz/` | 蜂鸣器反馈(`buzz.*`、`BuzzerFeedbackThread.*`) | | `watchdog/` | 看门狗定时器 | | `power/` | 电源管理(`PowerHAL.*`、`SGM41562.*` 充电器驱动) | | `memory/` | 内存审计工具(`MemAudit.*`、`MemClass.h`) | --- ## 关键注意事项 1. **`src/mesh/generated/`** — 自动生成的 protobuf 绑定,**禁止手动编辑**。需修改 `.proto` 时,先向 [meshtastic/protobufs](https://github.com/meshtastic/protobufs) 提 PR,再由 `bin/regen-protos.sh` 重新同步。 2. **`protobufs/`** — Git 子模块,需 `git submodule update --init` 初始化。 3. **`variants/`** — 每个硬件变体包含 `variant.h`(引脚/外设定义)和 `platformio.ini` 片段(构建配置)。 4. **`bin/run-tests.sh`** — 首选测试入口(内置 ASan/LSan + RED/AMBER/GREEN 判定)。 5. **`trunk fmt`** — 提交前必须运行,CI 的 `trunk_check` 门禁会拒绝未格式化的代码。 6. **`.github/copilot-instructions.md`** — AI Agent 的主指令文档,做任何非平凡修改前应先阅读。