diff --git a/PLAN.md b/PLAN.md index 7562ace..22b852d 100644 --- a/PLAN.md +++ b/PLAN.md @@ -1,6 +1,6 @@ # RTU_ALL_AI 项目 — 纯 C AI 开发工作计划 -> 版本: v1.0 +> 版本: v1.1 > 日期: 2026-07-07 > 远程仓库: http://127.0.0.1:3000/admin/RTU_ALL_AI.git > 分支策略: master(主分支,所有开发在 master 上直接进行) @@ -20,58 +20,151 @@ RTU_ALL_AI/ ├── .gitignore ├── README.md ├── src/ -│ ├── public/ # 公共基础库 -│ │ ├── liblist/ # [P0] Linux 内核侵入式链表 -│ │ │ ├── inc/list.h -│ │ │ └── src/(纯头文件实现,无需 .c) -│ │ ├── libfunc/ # [P0] 基础工具函数库 +│ ├── public/ # 公共基础库(对齐 RTU 全部 11 个模块) +│ │ ├── liblist/ # [P0★] Linux 内核侵入式链表(纯C,纯头文件) +│ │ │ └── inc/list.h +│ │ ├── libfunc/ # [P0★] 基础工具函数(CRC、校验、文件操作) │ │ │ ├── inc/myFunc.h │ │ │ └── src/myFunc.c -│ │ ├── liblog/ # [P0] 日志库 +│ │ ├── liblog/ # [P0★] 日志系统(控制台+文件,异步队列) │ │ │ ├── inc/myLog.h │ │ │ └── src/myLog.c -│ │ ├── libtask/ # [P1] 任务调度库 +│ │ ├── libtask/ # [P1★] 任务调度(定时器、事件循环) │ │ │ ├── inc/myTask.h │ │ │ └── src/myTask.c -│ │ ├── libdatacenter/ # [P1] 数据中心(信号存储) +│ │ ├── libdatacenter/ # [P1★] 数据中心(信号点 CRUD,侵入式链表) │ │ │ ├── inc/myDatacenter.h │ │ │ └── src/myDatacenter.c -│ │ └── libcomm/ # [P2] 通讯抽象层 -│ │ ├── inc/myComm.h -│ │ └── src/myComm.c -│ ├── protocol/ # 协议实现层 -│ │ ├── libmodbus/ # [P1] Modbus RTU/TCP 协议站 +│ │ ├── libcJSON/ # [P1★] JSON 解析(纯C,cJSON 裁剪版) +│ │ │ ├── inc/cJSON.h +│ │ │ └── src/cJSON.c +│ │ ├── libxml/ # [P2★] XML 解析(纯C,tinyxml2 裁剪版) +│ │ │ ├── inc/tinyxml2.h +│ │ │ └── src/tinyxml2.c +│ │ ├── libmd5/ # [P1★] MD5 摘要算法 +│ │ │ ├── inc/myMd5.h +│ │ │ └── src/myMd5.c +│ │ ├── libmy_xxhash/ # [P1★] xxHash 快速哈希(纯C) +│ │ │ ├── inc/xxhash.h +│ │ │ └── src/xxhash.c +│ │ ├── libcomm/ # [P2★] 通讯抽象层(串口/TCP 统一接口) +│ │ │ ├── inc/myComm.h +│ │ │ └── src/myComm.c +│ │ ├── libcmd/ # [P2★] 命令处理框架(注册/分发/回传) +│ │ │ ├── inc/myCmd.h +│ │ │ └── src/myCmd.c +│ │ └── libmy_mosquitto/ # [P3○] MQTT 客户端(mosquitto C 封装) +│ │ ├── inc/myMosquitto.h +│ │ └── src/myMosquitto.c +│ ├── protocol/ # 协议实现层(对齐 RTU 全部 6 个模块) +│ │ ├── libmodbus/ # [P1★] Modbus RTU/TCP 从站协议栈 │ │ │ ├── inc/myModbus.h │ │ │ └── src/myModbus.c -│ │ └── lib60870/ # [P2] IEC 60870-5-104 协议站 -│ │ ├── inc/my104.h -│ │ └── src/my104.c -│ ├── system/ # 系统管理层 -│ │ ├── RTU/ # [P2] 主程序入口 +│ │ ├── lib60870/ # [P2★] IEC 60870-5-101/103/104 协议栈 +│ │ │ ├── inc/lib60870_common.h +│ │ │ ├── inc/lib60870_public.h +│ │ │ ├── inc/gb101.h / gb103.h / gb104.h +│ │ │ └── src/*.c +│ │ ├── libicp67/ # [P2○] ICP67 专有协议 +│ │ │ ├── inc/icp67.h +│ │ │ └── src/icp67.c +│ │ ├── libmms_m/ # [P3○] IEC 61850 MMS 主站(客户端) +│ │ │ ├── inc/myMms_m.h +│ │ │ └── src/myMms_m.c +│ │ ├── libmms_s/ # [P3○] IEC 61850 MMS 从站(服务端) +│ │ │ ├── inc/myMms_s.h +│ │ │ └── src/myMms_s.c +│ │ └── libmongoose/ # [P3○] 嵌入式 HTTP/WebSocket 服务 +│ │ ├── inc/mongoose.h +│ │ └── src/mongoose.c +│ ├── system/ # 系统管理层(对齐 RTU 全部 9 个模块) +│ │ ├── RTU/ # [P2★] 主程序入口(初始化、主循环) │ │ │ ├── inc/app_sys.h +│ │ │ ├── inc/app_cmd.h │ │ │ └── src/main.c -│ │ └── libweb_server/ # [P3] Web 管理界面 +│ │ ├── libiec/ # [P2★] IEC 规约点表定义与解析 +│ │ │ ├── inc/iec.h +│ │ │ ├── inc/iec_point.h +│ │ │ ├── inc/iec_method.h +│ │ │ └── src/iec_cfg_parse.c +│ │ ├── libcom_decode/ # [P2★] 通讯通道解码与分发 +│ │ │ ├── inc/com_decode.h +│ │ │ ├── inc/com_channel_def.h +│ │ │ └── src/com_decode.c +│ │ ├── libmodbus_m/ # [P2★] Modbus 主站管理(轮询/采集) +│ │ │ ├── inc/modbus_m.h +│ │ │ └── src/modbus_m.c +│ │ ├── libiec61850m/ # [P3○] IEC 61850 MMS 主站管理 +│ │ │ ├── inc/iec61850m.h +│ │ │ ├── inc/parse_xml.h +│ │ │ └── src/iec61850m.c +│ │ ├── libiec61850s/ # [P3○] IEC 61850 MMS 从站管理 +│ │ │ ├── inc/iec61850s.h +│ │ │ ├── inc/parse_xml.h +│ │ │ └── src/iec61850s.c +│ │ ├── libplc/ # [P3○] PLC 逻辑引擎 +│ │ │ ├── inc/plc.h +│ │ │ └── src/plc.c +│ │ ├── libself_ptl/ # [P3○] 内部自定义协议 +│ │ │ ├── inc/self_ptl.h +│ │ │ ├── inc/method.h +│ │ │ └── src/self_ptl.c +│ │ └── libweb_server/ # [P2★] Web 管理服务(REST + WebSocket) │ │ ├── inc/web_server.h +│ │ ├── inc/ws_method.h │ │ └── src/web_server.c -│ └── test/ # 单元测试 -│ ├── test_list.c # [P0] 链表单元测试 -│ ├── test_datacenter.c # [P1] 数据中心单元测试 -│ └── test_modbus.c # [P1] Modbus 单元测试 -└── release/ # 构建系统 - ├── build.sh # 编译脚本 - ├── linux.mk # 编译选项(支持 x86/arm 切换) - ├── makefile # 顶层 Makefile(递归) - ├── inc/ # 对外暴露的公共头文件(软链接/复制) - └── src/ # 每个模块的 makefile - ├── makefile # 第二层 +│ └── test/ # 单元测试(每个模块一个 test_xxx.c) +│ ├── test_list.c # [P0★] 链表操作全量测试 +│ ├── test_log.c # [P0★] 日志队列测试 +│ ├── test_datacenter.c # [P1★] 数据中心 CRUD 测试 +│ ├── test_cjson.c # [P1★] JSON 解析测试 +│ ├── test_modbus.c # [P1★] Modbus 协议测试 +│ └── test_60870.c # [P2★] IEC104 协议测试 +└── release/ # 构建系统(与 RTU 结构完全一致) + ├── build.sh # 编译脚本(x86 / arm 一键切换) + ├── linux.mk # 公共编译选项(CROSS_COMPILE、路径) + ├── makefile # 顶层 Makefile(递归 src/) + ├── pack_web.sh # Web 资源打包脚本(P3 阶段) + ├── inc/ # 对外暴露的公共头文件 + └── src/ # 每个模块的 makefile + ├── makefile # 第二层(递归 public/protocol/system) ├── public/ + │ ├── makefile # 第三层 + │ ├── liblist/makefile │ ├── libfunc/makefile │ ├── liblog/makefile - │ └── ... + │ ├── libtask/makefile + │ ├── libdatacenter/makefile + │ ├── libcJSON/makefile + │ ├── libxml/makefile + │ ├── libmd5/makefile + │ ├── libmy_xxhash/makefile + │ ├── libcomm/makefile + │ ├── libcmd/makefile + │ └── libmy_mosquitto/makefile ├── protocol/ + │ ├── makefile + │ ├── libmodbus/makefile + │ ├── lib60870/makefile + │ ├── libicp67/makefile + │ ├── libmms_m/makefile + │ ├── libmms_s/makefile + │ └── libmongoose/makefile └── system/ + ├── makefile + ├── RTU/makefile + ├── libiec/makefile + ├── libcom_decode/makefile + ├── libmodbus_m/makefile + ├── libiec61850m/makefile + ├── libiec61850s/makefile + ├── libplc/makefile + ├── libself_ptl/makefile + └── libweb_server/makefile ``` +> **图例**: [P0★] 本期实现 | [P2★] 本期实现 | [P3○] 后续扩展(预留目录+stub) + --- ## 三、代码规范(严格对齐 RTU 风格) @@ -122,49 +215,81 @@ extern "C" { // 兼容 C++ 调用 --- -## 四、分阶段开发计划 +## 四、模块优先级说明 + +| 标记 | 含义 | +|------|------| +| ⭐ P0 | 基础模块,无外部依赖,最先实现 | +| ⭐ P1 | 核心模块,依赖 P0 模块,第二批次 | +| ⭐ P2 | 业务模块,依赖 P0/P1,第三批次 | +| ○ P3 | 预留模块,仅创建目录+stub,后续扩展 | + +--- + +## 五、分阶段开发计划 ### 阶段 0:基础设施搭建(预计 1-2 天) -| 序号 | 任务 | 产出 | 状态 | -|------|------|------|------| -| 0.1 | 搭建构建系统 | `release/linux.mk`, `release/makefile`, `release/build.sh` | ⬜ | -| 0.2 | 创建 `myBase.h` 基础定义 | `release/inc/myBase.h` | ⬜ | -| 0.3 | 实现 `liblist` 侵入式链表 | `src/public/liblist/inc/list.h` | ⬜ | -| 0.4 | 实现 `liblog` 日志库 | `src/public/liblog/` | ⬜ | -| 0.5 | 实现 `libfunc` 基础工具 | `src/public/libfunc/` | ⬜ | -| 0.6 | 编写链表单元测试 | `src/test/test_list.c` | ⬜ | -| 0.7 | **编译验证 + 代码审查** | 全量编译通过、测试通过 | ⬜ | +| 序号 | 任务 | 模块 | 产出 | 状态 | +|------|------|------|------|------| +| 0.1 | 搭建构建系统 | — | `release/linux.mk`, `release/makefile`, `release/build.sh` | ⬜ | +| 0.2 | 创建 `myBase.h` 基础定义 | — | `release/inc/myBase.h`(宏、类型、大小端转换) | ⬜ | +| 0.3 | 实现侵入式链表 | `liblist` | `src/public/liblist/inc/list.h` | ⬜ | +| 0.4 | 实现日志系统 | `liblog` | `src/public/liblog/inc/myLog.h`, `src/myLog.c` | ⬜ | +| 0.5 | 实现基础工具函数 | `libfunc` | `src/public/libfunc/inc/myFunc.h`, `src/myFunc.c` | ⬜ | +| 0.6 | 创建全部预留模块的目录+stub | 所有 P3 | 26 个模块的 `inc/` + stub `src/` 骨架 | ⬜ | +| 0.7 | 链表 + 日志单元测试 | — | `src/test/test_list.c`, `test_log.c` | ⬜ | +| 0.8 | **编译验证 + 代码审查** | — | 全量编译通过、测试通过 | ⬜ | -### 阶段 1:数据中心 + 任务调度(预计 2-3 天) +### 阶段 1:数据基础设施(预计 2-3 天) -| 序号 | 任务 | 产出 | 状态 | -|------|------|------|------| -| 1.1 | 设计信号数据模型 | 设计文档 + `dc_signal_t` 结构体 | ⬜ | -| 1.2 | 实现 `libdatacenter` 信号存储 | CRUD 接口,侵入式链表管理 | ⬜ | -| 1.3 | 实现 `libtask` 任务调度 | 任务注册、定时触发、事件驱动 | ⬜ | -| 1.4 | 编写数据中心单元测试 | `src/test/test_datacenter.c` | ⬜ | -| 1.5 | **编译验证 + 代码审查** | 全量编译通过、测试通过 | ⬜ | +| 序号 | 任务 | 模块 | 产出 | 状态 | +|------|------|------|------|------| +| 1.1 | 实现 MD5 摘要算法 | `libmd5` | `src/public/libmd5/` | ⬜ | +| 1.2 | 实现 xxHash 快速哈希 | `libmy_xxhash` | `src/public/libmy_xxhash/` | ⬜ | +| 1.3 | 实现 cJSON 解析 | `libcJSON` | `src/public/libcJSON/`(从 RTU 裁剪) | ⬜ | +| 1.4 | 设计信号数据模型 | — | `dc_signal_t` 等结构体设计文档 | ⬜ | +| 1.5 | 实现数据中心 | `libdatacenter` | CRUD 接口,侵入式链表管理信号点 | ⬜ | +| 1.6 | 实现任务调度 | `libtask` | 任务注册、定时触发、事件驱动 | ⬜ | +| 1.7 | 编写单元测试 | — | `test_cjson.c`, `test_datacenter.c` | ⬜ | +| 1.8 | **编译验证 + 代码审查** | — | 全量编译通过、测试通过 | ⬜ | -### 阶段 2:通讯协议(预计 3-4 天) +### 阶段 2:通讯与协议(预计 3-4 天) -| 序号 | 任务 | 产出 | 状态 | -|------|------|------|------| -| 2.1 | 实现 `libcomm` 通讯抽象层 | 串口/TCP 统一接口 | ⬜ | -| 2.2 | 实现 `libmodbus` Modbus 从站 | RTU/TCP 模式,线圈/寄存器读写 | ⬜ | -| 2.3 | 编写 Modbus 单元测试 | `src/test/test_modbus.c` | ⬜ | -| 2.4 | 实现 `lib60870` IEC104 从站 | 总召、遥测、遥信、遥控 | ⬜ | -| 2.5 | **编译验证 + 代码审查** | 全量编译通过、测试通过 | ⬜ | +| 序号 | 任务 | 模块 | 产出 | 状态 | +|------|------|------|------|------| +| 2.1 | 实现通讯抽象层 | `libcomm` | 串口/TCP 统一接口(打开/发送/接收/关闭) | ⬜ | +| 2.2 | 实现命令处理框架 | `libcmd` | 命令注册、分发、回调执行 | ⬜ | +| 2.3 | 实现 XML 解析 | `libxml` | `src/public/libxml/`(tinyxml2 裁剪版) | ⬜ | +| 2.4 | 实现 Modbus 协议栈 | `libmodbus` | RTU/TCP 从站,线圈/寄存器读写 | ⬜ | +| 2.5 | 实现 IEC 60870-5-104 | `lib60870` | 总召、遥测、遥信、遥控、对时 | ⬜ | +| 2.6 | 实现 IEC 点表解析 | `libiec` | `src/system/libiec/`,iec_cfg_parse | ⬜ | +| 2.7 | 实现 Modbus 主站管理 | `libmodbus_m` | 轮询、采集、数据分发 | ⬜ | +| 2.8 | 编写单元测试 | — | `test_modbus.c`, `test_60870.c` | ⬜ | +| 2.9 | **编译验证 + 代码审查** | — | 全量编译通过、测试通过 | ⬜ | ### 阶段 3:系统集成(预计 2-3 天) -| 序号 | 任务 | 产出 | 状态 | -|------|------|------|------| -| 3.1 | 实现 `RTU/main.c` 主程序 | 模块初始化、主循环 | ⬜ | -| 3.2 | 实现 Web 服务器(可选) | `libweb_server` | ⬜ | -| 3.3 | 端到端集成测试 | 多模块联调 | ⬜ | -| 3.4 | **全量编译验证 + 代码审查** | 交叉编译(ARM)、单元测试 | ⬜ | -| 3.5 | 编写 README 文档 | 项目说明、编译指南、架构图 | ⬜ | +| 序号 | 任务 | 模块 | 产出 | 状态 | +|------|------|------|------|------| +| 3.1 | 实现通讯通道解码 | `libcom_decode` | 多通道帧解析、分发到各协议栈 | ⬜ | +| 3.2 | 实现 Web 管理服务 | `libweb_server` | REST API + WebSocket 实时推送 | ⬜ | +| 3.3 | 实现主程序入口 | `RTU` | 模块初始化、主循环、信号处理 | ⬜ | +| 3.4 | 端到端集成测试 | — | 多模块联调、协议互通验证 | ⬜ | +| 3.5 | **编译验证 + 代码审查** | — | x86 本地 + ARM 交叉编译全通过 | ⬜ | +| 3.6 | 编写 README 文档 | — | 项目说明、编译指南、模块架构图 | ⬜ | + +### 阶段 4(后续扩展):预留模块实现 + +| 序号 | 任务 | 模块 | 优先级 | 状态 | +|------|------|------|------|------| +| 4.1 | ICP67 专有协议 | `libicp67` | P3 ○ | ⬜ | +| 4.2 | IEC 61850 MMS 主站 | `libmms_m` + `libiec61850m` | P3 ○ | ⬜ | +| 4.3 | IEC 61850 MMS 从站 | `libmms_s` + `libiec61850s` | P3 ○ | ⬜ | +| 4.4 | 嵌入式 HTTP 服务 | `libmongoose` | P3 ○ | ⬜ | +| 4.5 | MQTT 客户端 | `libmy_mosquitto` | P3 ○ | ⬜ | +| 4.6 | PLC 逻辑引擎 | `libplc` | P3 ○ | ⬜ | +| 4.7 | 内部自定义协议 | `libself_ptl` | P3 ○ | ⬜ | --- @@ -203,20 +328,60 @@ extern "C" { // 兼容 C++ 调用 ## 七、关键技术点 ### 7.1 Linux 内核侵入式链表(list.h) -- 使用标准的 `struct list_head` 双向循环链表 -- 实现 `list_add`, `list_add_tail`, `list_del`, `list_for_each_entry` 等宏 +- 使用标准的 `struct list_head` 双向循环链表(`/usr/include/linux/list.h` 精简版) +- 实现 `list_add`, `list_add_tail`, `list_del`, `list_del_init`, `list_for_each_entry` 等宏 +- 实现 `list_empty`, `list_entry`, `list_first_entry` 辅助宏 - 所有模块的数据结构使用侵入式链表管理 ### 7.2 编译系统 - 支持 `x86`(本地调试)和 `arm`(RK3568 交叉编译)两种模式 -- 每个模块编译为 `.a` 静态库 -- 顶层 makefile 递归构建 +- 每个模块编译为 `.a` 静态库,顶层递归构建 - `build.sh x86` 或 `build.sh arm` 一键编译 +- 公共头文件统一复制到 `release/inc/` ### 7.3 日志系统 -- 支持控制台 + 文件双输出 -- 异步日志队列(侵入式链表实现) -- 级别:INFO / ERROR +- 支持控制台 + 文件双输出,异步日志队列(侵入式链表实现) +- 级别:INFO / ERROR,宏:`LOG_I` / `LOG_E` +- 文件日志支持按大小轮转(`LOG_FILE_MAX_SIZE` / `LOG_FILE_MAX_COUNT`) + +### 7.4 基础公共库(public/) +| 模块 | 来源 | 核心功能 | +|------|------|------| +| `liblist` | Linux 内核 | 侵入式双向循环链表,纯头文件 | +| `libfunc` | 自研 | CRC16/32、校验和、文件操作、环境变量、字节序 | +| `liblog` | 自研 | 异步日志(控制台+文件)、按大小轮转 | +| `libtask` | 自研 | 任务注册/调度、定时器、线程池 | +| `libdatacenter` | 自研 | 信号点 CRUD、侵入式链表索引、xxHash 查找 | +| `libcJSON` | cJSON 裁剪 | JSON 解析/生成,纯 C,无动态内存溢出风险 | +| `libxml` | tinyxml2 裁剪 | XML 解析(用于 IEC 61850 SCL 文件) | +| `libmd5` | RFC 1321 | MD5 摘要,用于文件校验和协议认证 | +| `libmy_xxhash` | xxHash | 极速哈希,用于数据中心信号点快速查找 | +| `libcomm` | 自研 | 串口/TCP 统一抽象(open/send/recv/close) | +| `libcmd` | 自研 | 命令注册表、分发执行、异步回调 | +| `libmy_mosquitto` | mosquitto 封装 | MQTT 客户端,发布/订阅(预留 P3) | + +### 7.5 协议层(protocol/) +| 模块 | 来源 | 核心功能 | +|------|------|------| +| `libmodbus` | libmodbus 裁剪 | Modbus RTU/TCP 从站,01/03/05/06/15/16 功能码 | +| `lib60870` | lib60870 裁剪 | IEC 101/103/104 从站,总召/对时/遥控 | +| `libicp67` | 自研 | ICP67 专有协议(预留 P3) | +| `libmms_m` | libiec61850 封装 | MMS 客户端(预留 P3) | +| `libmms_s` | libiec61850 封装 | MMS 服务端(预留 P3) | +| `libmongoose` | mongoose | 嵌入式 HTTP/WebSocket(预留 P3) | + +### 7.6 系统管理层(system/) +| 模块 | 来源 | 核心功能 | +|------|------|------| +| `RTU` | 自研 | 主入口:模块初始化、主循环、信号周期处理 | +| `libiec` | 自研 | IEC 规约点表定义、解析、映射到数据中心 | +| `libcom_decode` | 自研 | 通讯通道帧解析、协议识别、分发 | +| `libmodbus_m` | 自研 | Modbus 主站:轮询队列、采集调度 | +| `libiec61850m` | 自研 | 61850 主站管理(预留 P3) | +| `libiec61850s` | 自研 | 61850 从站管理(预留 P3) | +| `libplc` | 自研 | PLC 逻辑引擎(预留 P3) | +| `libself_ptl` | 自研 | 内部自定义协议(预留 P3) | +| `libweb_server` | 自研 | REST API + WebSocket,嵌入式 Web 管理 | --- @@ -224,18 +389,22 @@ extern "C" { // 兼容 C++ 调用 | 风险 | 对策 | |------|------| -| AI 编码风格不一致 | 严格对照 RTU 已有代码,代码审查时逐项检查 | -| 侵入式链表使用不当 | 先写完整单元测试,验证所有链表操作 | +| AI 编码风格不一致 | 严格对照 RTU 已有代码(`myFunc.c`, `myLog.c` 等),代码审查时逐项检查 | +| 侵入式链表使用不当 | 先写完整单元测试,覆盖增删改查、空链表、边界条件 | | 编译环境差异 | 优先保证 x86 本地编译通过,ARM 交叉编译作为验证步骤 | -| 模块间耦合过重 | 每个模块独立编译为 .a,依赖通过头文件接口明确 | +| 模块间耦合过重 | 每个模块独立编译为 .a,依赖通过 `release/inc/` 头文件接口明确 | +| cJSON/tinyxml2 安全漏洞 | 裁剪版本,移除不受信输入路径;单元测试覆盖畸形输入 | +| P3 预留模块过度设计 | P3 模块仅创建目录 + 返回 0 的 stub 函数,不实现业务逻辑 | --- ## 九、审查清单 -- [ ] 计划是否覆盖所有必要的模块? -- [ ] 代码规范是否对齐 RTU 风格? -- [ ] 模块优先级排序是否合理? -- [ ] 是否需要调整模块范围(增/删/改)? -- [ ] 构建系统方案是否可行? -- [ ] 侵入式链表的实现粒度是否合适? +- [ ] 模块列表是否覆盖了 RTU 的全部 26 个模块? +- [ ] 模块优先级(P0/P1/P2/P3)排序是否合理? +- [ ] 代码规范是否严格对齐 RTU 风格? +- [ ] 构建系统方案是否可行(递归 makefile + x86/arm 切换)? +- [ ] 侵入式链表的实现粒度(宏列表)是否合适? +- [ ] JSON/XML/MD5/xxHash 裁剪方案是否可行? +- [ ] P3 预留模块的 stub 策略是否合适? +- [ ] 是否需要调整模块范围(增/删/改优先级)?