OS 后端接入

Nexus 维护 Native、Baremetal、已审 FreeRTOS port 及显式 Native/M4 ThreadX 子集。ThreadX 有自身许可证、静态任务生命周期与掩码合同,不继承九核 FreeRTOS port 范围。新增 RTOS 需真实接入需求,以及审阅的内核许可证、版本、port 和资源预算。本文件与执行探针准备这些工作,不声称 RTX、Zephyr 或其他内核已支持。应用继续持有任务拓扑、存储和停机。

公共合同

边界

要求行为

时间

有限绝对单调微秒,与调用者同一时钟域;等待期间时钟持续推进。无限等待用 NX_DEADLINE_NEVER,饱和构造用 nx_deadline_after。

完成

唤醒或序列变化仅提示重查权威谓词。无关唤醒不重启 deadline。最终谓词观察可优先于超时或其他等待错误。

准入

拒绝操作不保留引用。Timeout 不取消、完成并排空或回收已接受 I/O 请求。

等待端口

唯一 owner 调用 arm/wait;多个发布者可在合同上下文调用 wake。Arm 与谓词复查必须关闭丢失唤醒窗口。

存储

应用提供适配对象、栈、任务控制块和队列缓冲,无隐藏 worker 或最大池。Native POSIX 库可能内部动态分配,其成本不是 MCU 预算。

通知销毁

回收前发布者和唯一等待者必须静止。等待错误不足以证明静止。

任务销毁

唯一生命周期所有者和唯一 joiner。入口返回自身不足以回收;成功 join 建立回收条件。合作式停止显式进行。

队列销毁

Close 拒绝新 send、唤醒阻塞用户并允许保留项排空;用户必须退出后才能 destroy。没有 close 的原始内核队列须暴露独立 owner 协议。

ISR

声明各调用的 task/ISR 合法上下文,调用任何内核 ISR API 前拒绝不满足 syscall ceiling 的异常或优先级。

掩码

每条返回路径保持进入中断掩码。Baseline port 在内核调用前显式恢复借用的 PRIMASK;Mainline 遵循 BASEPRI ceiling。不能假定进入未屏蔽。

功能

不支持的 CPU、port、ABI、security 或 MPU 组合在配置阶段失败。主机模型不能建立真实内核调度、物理 IRQ 优先级或板级时序。

nx_wait_port_t 保留直接回调 ABI。维护中的等待成本模型比较真实链接方案。后端接入不能新增第二 deadline helper、运行时器件注册表或装配权威。

接入次序

  1. 记录真实需求、内核许可证/版本、依赖身份、CPU 能力与明确排除项。按仓库既有依赖流程取得源码,不修改 vendored 内核来隐藏适配问题。

  2. 先增加合同回归并保留真实 RED。GoogleTest/GoogleMock 执行真实生产适配,只 mock 外部硬件或内核边界。内核行为需真实内核调度探针,mock 调用本身不能建立该行为。

  3. 实现静态适配及上下文/deadline/生命周期文档。I/O 等待接入前定义通知所有权、shutdown/join 与 ISR 优先级拒绝。固件保持 C11,测试 C++ 留在固件目标之外。

  4. 在既有 CPU/kernel 解析器与 CMake 目标图中提出 port。作者 TOML 仍是唯一选择权威,解析器必须拒绝不支持组合。接入变更需维护者审查;探针不能自行增加生产后端。

  5. 按 Native 参考建立严格探针声明。选择 host、baremetal 或 kernel,逐要求列出精确 Google case 身份。内核候选增加 mask/ISR 和真实调度组、source lock 路径与实际保留静态内核 API 符号。

  6. 对已配置生产构建运行 scripts/ci/os_backend_probe.py。它重新构建指定已注册 Google 目标、发现并执行全部 case,生成 fresh XML,校验精确 case 身份并报告真实 GNU ELF 测量。缺失组、过滤身份、空执行、skip/disabled case、缺失工具和源码变更均拒绝。

  7. MCU 候选还指定生产固件 build/target、ELF 和生成的 resolved-cpu.json 或完整 resolved.json CPU 解析。探针重建固件、校验 ARM ELF、对既有生产 CPU 解析器检查 short-enum 和浮点 ABI,绑定实际所属编译参数,拒绝未定义符号/heap/测试运行时,读取实际保留内核 API 符号及 RAM/Flash section。缺少 source lock 或 CPU/backend 未在解析器注册时直接拒绝准入。

  8. 审查原始命令、源码身份、测试、真实静态存储/Flash、保留指令和失败路径。经普通独立 CI/复现流程建立 clean candidate。物理时序、watchdog、低功耗时钟连续性和 IRQ 压力仍需 HIL 装备。

可执行范围

声明记录所需合同,不是实现遵守合同的证据。Runner 主动产生 fresh 执行,不接受提供的成功 XML 或状态标记。源码快照在执行前后绑定所属实现/测试、编译数据库与已编译源码,建立稳定工作树测量,不建立 clean Git 资格、依赖来源或可复现性。

claim_support 必须为 false。通过报告声明 support_promoted: false、registration: not_performed、maintainer_review_required: true、candidate_status: not_qualified 和 physical_status: not_executed。内核 API 保留证明链接符号;审阅的调度 case 和依赖流程建立语义与身份。Source lock 摘要自身不是充分依赖来源。

Native 测试 ELF RAM/Flash 计数只描述主机可执行文件 section。Native 夹具允许 256 KiB 调用方栈用于主机 sanitizer,不是推荐 MCU 栈大小。POSIX 库、进程栈、测试框架及 sanitizer 开销绝不能比较成嵌入式适配成本。

Native 参考命令和候选选项见探针夹具。CI 必须保留原始日志、fresh XML 和 report.json;证据缺失表示准入探针失败。