SerenityOS 如何在 QEMU 目标环境中运行 target 测试:run-tests-and-shutdown.sh 与 self-test 模式

发布时间:2026/9/12 6:29:58

SerenityOS 如何在 QEMU 目标环境中运行 target 测试:run-tests-and-shutdown.sh 与 self-test 模式 SerenityOS 如何在 QEMU 目标环境中运行 target 测试run-tests-and-shutdown.sh 与 self-test 模式【免费下载链接】serenityThe Serenity Operating System 项目地址: https://gitcode.com/GitHub_Trending/se/serenitySerenityOS 的测试分为两类host tests 在构建机上运行target tests 则运行在 SerenityOS 系统内部QEMU 模拟或裸机。如果你在开发 SerenityOS 用户空间或内核代码需要在改动后跑一遍系统内的测试来验证行为目标就是把构建产物装进 QEMU然后在目标系统里执行 target 测试。Documentation/RunningTests.md 给出了两条完整路径——在 QEMU 控制台里手动运行run-tests-and-shutdown.sh以及 CI 使用的 self-test 模式开机自动跑测试。本文只覆盖 x86_64 构建 QEMU 模拟这一场景。target 测试的产物位置target 测试在完整构建时一并编译安装后位于/usr/Tests少数系统测试出于历史原因安装在/bin。也就是说只要你执行了完整构建和ninja install测试程序就已经进入镜像剩下的问题只是在系统里怎么把它们跑起来。测试执行入口是安装到/home/anon/Tests的run-tests-and-shutdown.sh仓库中的源文件见 run-tests-and-shutdown.sh。准备构建镜像并启动 QEMU在仓库根目录执行以下命令来自 RunningTests.md 的 Running Target Tests 一节cmake -GNinja -S Meta/CMake/Superbuild -B Build/superbuild-x86_64 cmake --build Build/superbuild-x86_64 cd Build/x86_64 ninja install ninja qemu-image ninja run各步作用前两条命令初始化并执行完整构建ninja install将测试等产物安装进系统镜像ninja qemu-image生成 QEMU 磁盘镜像ninja run启动 QEMU 并等待系统引导完成。ninja run会启动一个 QEMU 虚拟机进程并占用当前终端属于正常开发调试用途不影响宿主机系统。方式一在 QEMU 控制台手动运行测试脚本系统引导完成后在初始终端中直接执行测试脚本cd ~ ./Tests/run-tests-and-shutdown.shRunningTests.md 给出的文档示例输出为courage ~ $ ./Tests/run-tests-and-shutdown.sh Running Tests on SerenityOS ...以上为文档示例实际输出以你的运行环境为准。结合仓库内 run-tests-and-shutdown.sh 的源码可以确认以下行为脚本会把失败数量写入./test-results.log内容为Failed: 数量并以失败数量作为退出码——这是判断结果的最直接依据只有当环境变量$DO_SHUTDOWN_AFTER_TESTS被设置时脚本才会在全部测试跑完后执行sync和shutdown -n关机。手动运行时不设置该变量系统会保留现场方便你继续排查失败项在aarch64或riscv64架构上除非向脚本显式传入--force测试会被跳过此时失败数记为 0。x86_64 目标不受此分支影响。方式二self-test 模式CI 的自动运行方式CI 不使用手动输入而是让 SystemServer 在开机时自动执行测试条件是系统以 self-test 模式引导。RunningTests.md 展示了/etc/SystemServer.ini中的 TestRunner 条目[TestRunnerttyS0] Executable/home/anon/Tests/run-tests-and-shutdown.sh StdIO/dev/ttyS0 EnvironmentDO_SHUTDOWN_AFTER_TESTS1 TERMxterm PATH/usr/local/bin:/usr/bin:/bin Useranon WorkingDirectory/home/anon SystemModesself-test几个要点SystemModesself-test表示该服务只在 self-test 模式下激活SystemServer 从内核接口/sys/kernel/system_mode读取当前模式来决定激活哪些服务见 SystemServer/main.cpp 中determine_system_mode()的实现条目里EnvironmentDO_SHUTDOWN_AFTER_TESTS1意味着走这条路径时测试跑完会自动shutdown -n虚拟机随之关闭——这是有意的闭环设计StdIO 使用/dev/ttyS0因为当 QEMU 以-display none和-serial stdio运行时该串口接到 QEMU 窗口的 stdoutCI 的 run 脚本另将串口调试输出重定向到./debug.log使测试的 stdout 与内核/测试中的 dbgln 输出都能被捕获。要在本地复现 CI 的 self-test 启动使用cirun options按文档执行export SERENITY_RUNci export SERENITY_KERNEL_CMDLINEgraphics_subsystem_modeoff system_modeself-test ninja run文档同时说明CI 会额外设置panicshutdown以便测试结束后 QEMU 直接退出默认值halt会让 QEMU 进程保留便于在系统停机后检查现场。上面的示例命令没有包含panicshutdown因此跑完后 QEMU 窗口会保留符合先验证结果再清理的顺序。结果判断与限制两条路径的结果判断方式一致看test-results.log中的Failed: 数量与脚本退出码为 0 说明没有失败项self-test 模式下若复现 CI 的日志捕获可在debug.log中同时查看测试 stdout 与 dbgln 调试输出。需要注意的边界self-test 条目固定了DO_SHUTDOWN_AFTER_TESTS1测试结束后目标系统会自行关机想保留现场排查时改用方式一手动运行脚本即可aarch64/riscv64上脚本默认不跑测试需传--force本文的主路径为 x86_64 QEMU不涉及这两个架构所有命令均在宿主机上对构建目录和 QEMU 虚拟机操作不修改仓库内容QEMU 进程可随时终止ninja run之外没有涉及宿主机的进程清理或文件删除。完成一次 target 测试运行后如需继续核对构建方式可参考 RunningTests.md 中 host tests 与 sanitizer 的说明它们与本文的 QEMU target 路径相互独立。【免费下载链接】serenityThe Serenity Operating System 项目地址: https://gitcode.com/GitHub_Trending/se/serenity创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/12 6:24:58

Kronos:开源K线预测基础模型,回测表现到底如何?

Kronos:开源K线预测基础模型,回测表现到底如何? 【免费下载链接】Kronos Kronos: A Foundation Model for the Language of Financial Markets 项目地址: https://gitcode.com/GitHub_Trending/kronos14/Kronos 假设是某个交易日收盘&…

2026/9/12 6:24:58

VirtualLab中Ince高斯模式的光学仿真与应用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 7:20:03

Python Flask MySQL Pyecharts:构建豆瓣电影数据可视化看板全流程

简介:一套基于PythonFlaskMySQLPyecharts构建的豆瓣电影数据可视化系统,面向高校计算机专业毕业设计、课程设计以及初入数据可视化方向的开发者,完整覆盖数据抓取、存储管理、后端接口与图表展示等环节。压缩包共209个文件,大小约…

2026/9/12 7:20:03

企业级AI Agent竞争版图与技术落地:从MCP到LangGraph的实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 7:20:03

程序员如何避免氛围编程陷阱,提升工作效率

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 7:20:03

SpringBoot奶茶店管理系统开发实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 7:15:03

Kronos K线预测实战指南:四步读懂首个开源金融基础模型

Kronos K线预测实战指南:四步读懂首个开源金融基础模型 【免费下载链接】Kronos Kronos: A Foundation Model for the Language of Financial Markets 项目地址: https://gitcode.com/GitHub_Trending/kronos14/Kronos Kronos 是首个面向金融 K 线&#xff0…

2026/9/12 2:05:33

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/12 3:55:12

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/12 6:37:43

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码