多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

FreeRTOS 内核验证怎么做?本地跑通 3 类自动化证明(附 4 个坑点)

FreeRTOS 内核验证怎么做?本地跑通 3 类自动化证明(附 4 个坑点) FreeRTOS 内核验证怎么做本地跑通 3 类自动化证明附 4 个坑点【免费下载链接】FreeRTOSClassic FreeRTOS distribution. Started as Git clone of FreeRTOS SourceForge SVN repo. Submodules the kernel.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeRTOS这篇文章写给需要在本地对 FreeRTOS 内核跑自动化验证的嵌入式工程师讲清 FreeRTOS/Test/ 目录下 4 套测试的分工给出 CBMC 内存安全证明、VeriFast 功能正确性证明、CMock 单元测试的本地运行命令并列出环境上最容易踩的坑。验证需求往哪放Test/ 目录下 4 套测试各解决什么问题FreeRTOS 内核由通用代码和移植层组成仓库用静态分析和动态分析两条线来保证正确性验证材料集中在 Test 目录4 个子目录各管一块目录工具验证内容运行位置CBMCC Bounded Model Checker有界模型检测器用数学方法检查越界、悬空指针等内存错误内核各 API 的内存安全本地机器每个入口函数一个证明VeriFastVeriFast 演绎验证器基于分离逻辑逐语句推证队列、列表数据结构的无界功能正确性证明本地机器结论与队列/列表长度无关CMockCMock 模拟框架用桩函数替换底层依赖做单元测试内核 API 的功能正确性宿主机 PCTarget集成测试内核 API 端到端行为真实目标板选型很直接怀疑越界或野指针找 CBMC要证明队列实现真的像队列找 VeriFast改完 API 想快速回归找 CMock涉及真实硬件时序才上 Target。第一条命令跑通 CBMC 内存安全证明CBMC 证明按入口函数组织proofs/ 下每个叶子目录如 TaskCreate、xQueueGenericSend 对应的目录是一个独立证明进去执行 make 即完成验证。完整流程git clone https://gitcode.com/GitHub_Trending/fr/FreeRTOS cd FreeRTOS git submodule update --init --recursive --checkout cd FreeRTOS/Test/CBMC/proofs python3 prepare.py第一步的 submodule 命令不能省内核源码放在子模块里漏掉它后续所有构建都会缺文件。然后进入任意证明目录执行 make耗时可能较长。跑完后打开生成的html/html/index.html报告Errors 一栏显示 None 即为通过。VeriFast 队列证明怎么跑调用图怎么读VeriFast 证明的对象是内核最核心的两个数据结构——队列和列表。所谓无界是指结论不依赖队列或列表的长度任意数量的任务和中断下都成立。验证单个证明用命令行工具/path/to/verifast -I include -c queue/xQueueGenericSend.c成功输出类似0 errors found (335 statements verified)。整套回归执行VERIFAST/path/to/verifast make。有 4 个证明文件需要先关闭算术溢出检查才能通过具体文件和参数见下文坑点。调用图展示了队列证明的依赖关系绿色节点是已证明函数蓝色节点由锁不变量建模即假设底层实现提供相应的原子性保证灰色节点是 memcpy、malloc 这类直接假设的桩函数。改队列相关代码后值得对照这张图看改动落在哪个已证明子图里。CMock 单元测试与覆盖率报告怎么出CMock 把内核 API 的底层依赖替换成模拟对象在宿主机上做单元测试。前置工具链为 GCC、unifdef、LCOV、Make、Ruby常用目标make queue构建队列单元测试可执行文件落在 build/bin/make run构建并依次运行全部单元测试make coverage跑完测试后在 build/coverage/index.html 生成 HTML 覆盖率报告单个测试目录用make -C list可再加 gcov 或 lcovhtml 目标出覆盖率开发或修改测试用例时建议加ENABLE_SANITIZER1开启地址 sanitizer 抓内存错误它本身会引入测不到的分支因此默认关闭。第一次跑验证最容易踩的 4 个坑 CBMC 命令不在 PATH运行前确认cbmc、goto-ccWindows 下为goto-cl、goto-instrument都能直接执行装完 CBMC 后用命令逐个验证一次。64 位机器缺 32 位库CBMC 构建需要 32 位 gcc 库Linux 上先执行sudo apt-get install gcc-multilib否则编译阶段直接失败。VeriFast 报一片错queue 下的 create.c、prvCopyDataToQueue.c、xQueueGenericSendFromISR.c、xQueueReceiveFromISR.c 这 4 个证明必须关闭溢出检查命令行加-disable_overflow_checkvfide 中取消勾选 Check arithmetic overflow否则是误报改过证明注释后 make 的覆盖率回归会失败用NO_COVERAGE1 make临时绕过之后再补齐。Windows 原生不支持CBMC 证明目前只支持 Python 构建官方路径是 Linux/macOSWindows 上先装 WSL 再跑。建议按 clone、初始化子模块、跑通 CBMC 和 CMock 的顺序起步最后再上 VeriFast。之后每次改动内核对应证明集跑一遍make 或 make coverage报告干净再合入。【免费下载链接】FreeRTOSClassic FreeRTOS distribution. Started as Git clone of FreeRTOS SourceForge SVN repo. Submodules the kernel.项目地址: https://gitcode.com/GitHub_Trending/fr/FreeRTOS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表