news 2026/9/20 21:49:52

FreeRTOS内核三层校验:CBMC、CMock、VeriFast怎么跑通

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FreeRTOS内核三层校验:CBMC、CMock、VeriFast怎么跑通

FreeRTOS内核三层校验:CBMC、CMock、VeriFast怎么跑通

【免费下载链接】FreeRTOS'Classic' FreeRTOS distribution. Started as Git clone of FreeRTOS SourceForge SVN repo. Submodules the kernel.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeRTOS

FreeRTOS的测试框架把三层校验——CBMC内存安全证明、CMock内核单元测试、VeriFast功能正确性证明——都收进了仓库,克隆下来就能在本地重新验证内核的内存安全与API行为。

三层校验各管什么,源码在哪

FreeRTOS内核由公共代码和移植层两部分组成,Test/目录把校验工作分成三层,各有独立目录和构建入口:

  • CMock:内核API功能正确性的单元测试,按queue、tasks、timers、event_groups、message_buffer等模块分目录,在宿主机上编译运行
  • CBMC:内存安全的自动化证明,对每个入口点做有界模型检测,CI系统会在每个拉取请求上跑这套证明
  • VeriFast:queue与list两个数据结构的无界功能正确性证明,结论不受队列长度限制,覆盖任意数量和任意时序的任务与中断组合

三份源码分别位于CMock单元测试、CBMC证明基础设施、VeriFast证明。CBMC下的patches/存放剥离static与volatile限定符的预处理补丁,VeriFast下的include/proof/存放全部证明共享的谓词与引理。Test/Target/目录另有跑在真实目标板上的集成测试。

克隆仓库并拉取内核子模块

内核源码在子模块里,不取回的话Test/下的测试目录找不到被校验的对象:

git clone https://gitcode.com/GitHub_Trending/fr/FreeRTOS cd FreeRTOS && git submodule update --init --recursive

在宿主机跑CMock单元测试

依赖只有GCC、Make、Ruby、unifdef、LCOV。进入Test/CMock/后按模块点名跑,例如构建并执行队列单元测试用make queue,可执行文件落在build/bin。make -C list gcov跑单个目录并产出gcov覆盖数据,make coverage则构建全部测试并输出HTML报告到build/coverage。框架本体在CMock/CMock/子目录里,记住make目标名即可,不必深入其内部。新增用例时建议加ENABLE_SANITIZER=1打开ASan。

本地跑CBMC内存安全证明

前置条件:Python ≥ 3.7、Make、32位gcc库(Debian系安装gcc-multilib)、cbmc、goto-cc、goto-instrument在PATH中。proofs/下每个叶子目录是一个入口点的证明,先生成Makefile:

cd FreeRTOS/Test/CBMC/proofs python3 prepare.py

再进入目标入口点目录执行make,产出HTML与JSON报告,例如TaskCreate对应proofs/Task/TaskCreate/html/html/index.html,Errors栏显示None即为通过。

VeriFast证明与队列调用图

CI固定使用VeriFast 19.12,装好后在VeriFast目录跑全套证明回归:

VERIFAST=/path/to/verifast make

queue/与list/目录下每个文件是一个API函数的标注版证明,注解是/*@ ... @*/形式的分离逻辑契约,也可以用verifast命令行按文件单验。证明改动后语句覆盖不再匹配时,先用NO_COVERAGE=1 make绕过覆盖检查。下图是queue证明的调用图:绿色为已证明函数,蓝色为按锁不变式建模的函数,灰色为假设的桩:

首次运行的几个高频坑

  • 忘记拉子模块是最常见的失败原因:证明目录里没有内核源码,make直接报错
  • 64位Linux漏装gcc-multilib,CBMC构建阶段失败
  • CBMC证明耗时较长,先对你改动的入口点单独证明,别上来全量跑;Windows用户走WSL
  • VeriFast IDE验证create.c等4个queue证明时必须关掉Check arithmetic overflow,否则出现误报

什么时候值得跑这套测试

内核级二次开发、要给内核建立合规CI、或需要引用功能正确性证据时,值得把三层校验依次跑通。如果只是改某个模块的bug做回归,跑对应模块的CMock单元测试就够,证明层交给CI去跑。

【免费下载链接】FreeRTOS'Classic' FreeRTOS distribution. Started as Git clone of FreeRTOS SourceForge SVN repo. Submodules the kernel.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeRTOS

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 21:39:09

Java公交车调度管理系统源码解析:从业务建模到调度引擎实战

简介:基于JAVA的公交车调度管理系统源码是一份面向计算机毕业设计、课程实践或同类管理系统开发者的完整项目资料,覆盖车辆信息、线路信息、调度计划、实时调度控制、GPS定位、数据统计等核心业务模块,适合需要掌握Java后端开发与调度业务建模…

作者头像 李华
网站建设 2026/9/20 21:38:57

open-code-review:基于 Git Diff 与可插拔 LLM Agent 的开放代码审查协议

1. 项目概述:这不是又一个代码审查工具,而是一次开发协作范式的迁移“open-code-review”这个名称乍看平平无奇,甚至有点像某个被遗忘在 GitHub 某个角落的冷门仓库名。但如果你最近两周刷过技术社区、看过几篇 LLM 工程实践笔记,…

作者头像 李华
网站建设 2026/9/20 21:36:19

纳什博弈在微电网协同优化中的应用与实践

1. 项目背景与核心价值去年参与某工业园区综合能源系统规划时,我亲历了多个微电网运营商为争夺有限的可再生能源配额而陷入"囚徒困境"的典型案例。这种非合作博弈导致整体系统效率损失高达23%,正是这次经历让我开始关注纳什博弈在微网协同中的…

作者头像 李华
网站建设 2026/9/20 21:35:08

RapidOCR 古籍识别实战:从竖排文字 OCR 扫描到可读文本

RapidOCR 古籍识别实战:从竖排文字 OCR 扫描到可读文本 【免费下载链接】RapidOCR 📄 Awesome OCR multiple programing languages toolkits based on ONNX Runtime, OpenVINO, MNN, PaddlePaddle, TensorRT and PyTorch. 项目地址: https://gitcode.c…

作者头像 李华