GNU Radio OOT 模块 MANIFEST 清单:以 gr-example_haakov 为范例的声明文件编写与解析全指南
通信科研【免费下载链接】gnuradioGNU Radio – the Free and Open Software Radio Ecosystem项目地址https://gitcode.com/gh_mirrors/gn/gnuradio点击查看免费下载导读本文以当前仓库中 grc/gui_qt/resources/manifests/gr-example_haakov.md 这份 MANIFEST 清单文件为分析对象系统讲解 GNU Radio 外部模块Out-of-Tree简称 OOT清单文件的字段含义、编写规范与在 GNU Radio CompanionGRC图形界面中的解析与展示流程。读完本文你将掌握 MANIFEST 的完整字段清单与类型约束、gr_modtool 自动生成的模板结构以及 GRC OOT 浏览器从加载、校验到渲染的完整链路能够为自己的 OOT 模块编写出可被 GRC 正常识别与展示的标准清单文件。一、什么是 MANIFEST 清单文件MANIFEST清单是一份以 YAML 格式书写、以.yml或.md为扩展名的元数据文件用于描述一个 GNU Radio OOT 模块的名称、简介、作者、版权、许可证、支持的 GNU Radio 版本、仓库地址等信息。它的作用体现在两个层面模块发布时gr_modtool生成的新模块模板中包含MANIFEST.yml并通过 CMake 在安装阶段将其以版本号命名的形式安装到系统共享目录作为模块对外发布的身份证GRC 使用时GNU Radio CompanionGRC的图形界面内置一个OOT 浏览器OOT Browser它会读取存放 MANIFEST 文件的目录grc/gui_qt/resources/manifests把每个清单解析后展示为左侧列表、右侧详情的浏览器界面方便用户查看社区中可用的外部模块。当前仓库中的 gr-example_haakov.md 正是存放于该 manifests 目录下的一个示例清单其内容如下title: Example OOT Module brief: GNU Radio components to do various things tags: - sdr author: - Håkon Vågsether copyright_owner: - Håkon Vågsether license: GPLv3 gr_supported_version: - v3.9 - v3.10 repo: https://github.com/haakov/gnuradio website: https://www.example.org #icon: icon_url # Put a URL to a square image here that will be used as an icon on CGRAN --- This module contains blocks to do things. Please se the [website](https://github.com/haakov/gnuradio) for more文件在 YAML 文档结束标记---之后的剩余文本即This module contains blocks to do things.这一段会被视为该模块的长描述description并在 GRC 的 OOT 浏览器中以 Markdown 形式渲染。二、MANIFEST 完整字段规范2.1 字段一览表gr_modtool模板 MANIFEST.yml 与 GRC 侧的核心校验器 grc/core/schema_checker/manifest.py 共同定义了完整的字段集合。综合两者MANIFEST 支持的字段如下字段类型是否必填含义title字符串是模块显示名称如Example OOT Modulefile_format整数是模板默认1清单文件格式版本号用于向后兼容version字符串否模块自身版本号如1.0brief字符串否一句话简介展示在 OOT 浏览器列表/详情中tags字符串列表否任意标签参考 CGRAN 上其他作者的用法如sdrauthor字符串列表否作者列表可含邮箱如Author Name authorsemail.addresscopyright_owner字符串列表否版权所有者列表license字符串否许可证名称如GPLv3gr_supported_version字符串列表否支持的 GNU Radio 版本列表如v3.9、v3.10repo字符串否源码仓库 URLwebsite字符串否项目官网 URL可选icon字符串否正方形图标图片 URL用于 CGRAN 站点展示dependencies字符串列表否运行时依赖的其他 OOT 模块description字符串否多行长描述支持基础 Markdown留空时尝试读取 README 文件需要说明的是grc/core/schema_checker/manifest.py中列出的字段含title为requiredTrue是 GRC 侧用于校验的字段集合而gr_supported_version、repo、dependencies等虽然在模板中可留空但 GRC 的 OOT 浏览器在运行时会对展示所需的全部字段做类型检查详见下文第三节。2.2 模板生成与安装使用gr_modtool创建新 OOT 模块时会自动生成上述字段齐全的模板 MANIFEST.yml。模板中对关键字段给出了编写指引tags注释说明标签是任意的但可以参考 CGRAN 上其他作者在用什么description支持多行字符串|-块并明确可以使用一些基础 Markdown如果留空会尝试查找 README 文件代替。在安装阶段模板 CMakeLists 会将该清单文件安装到系统share/gnuradio/manifests/目录下并以版本号命名区分见 gr-utils/modtool/templates/gr-newmod/CMakeLists.txtinstall(FILES MANIFEST.yml RENAME MANIFEST-${VERSION_MAJOR}.${VERSION_API}.${VERSION_ABI}${VERSION_PATCH}.yml DESTINATION share/gnuradio/manifests/howto)这意味着每个模块在不同版本下会安装对应的 MANIFEST 文件便于 GRC 及外部工具按版本识别模块元数据。三、GRC 对 MANIFEST 的加载、校验与展示GRC 图形界面中负责读取并展示这些清单的组件是 OOT 浏览器其实现在 grc/gui_qt/components/oot_browser.py界面布局定义在 grc/gui_qt/resources/oot_browser.ui。其处理流程分为三步3.1 加载与解析启动时OOTBrowser会把grc/gui_qt/resources/manifests目录作为manifest_dirself.manifest_dir os.path.join(Paths.RESOURCES, manifests) if not os.path.exists(self.manifest_dir): return for f in os.listdir(self.manifest_dir): with open(os.path.join(self.manifest_dir, f), r, encodingutf8) as manifest: text manifest.read() yml, desc text.split(---) data yaml.safe_load(yml) data[description] desc这里的关键实现细节是清单文件被---分隔符切成两半——前半部分是 YAML 文档由yaml.safe_load解析为字典后半部分---之后的所有文本被直接作为description字段存入。这正是 gr-example_haakov.md 中---之后那两行描述文本的用途。解析得到的每个清单会被包装为一个QListWidgetItem以title作为左侧列表项文本。3.2 类型校验每个解析后的清单都会经过validate()方法做字段类型检查。校验器定义了一张字段到期望 Python 类型的映射表type_dict { title: str, brief: str, website: str, dependencies: list, repo: str, copyright_owner: list, gr_supported_version: list, tags: list, license: str, description: str, author: list }校验逻辑为若字段存在但类型不符或字段缺失都会记录错误日志并标记为无效无效清单不会在浏览器中作为可用模块展示。例如 gr-example_haakov.md 中author、copyright_owner、tags、gr_supported_version均写成了 YAML 列表形式才能通过list类型的校验若误写为单个字符串则该模块会被忽略。3.3 右侧详情渲染用户点击左侧列表项后populate_right_view()会把各字段填充到右侧界面的对应控件中title、brief→ 标题与简介标签version→ Version: 文本website、repo→ 超链接标签无值时显示Nonedependencies→ 以;连接展示无值显示Nonecopyright_owner→ 以,连接展示无值显示Nonegr_supported_version→ 以,连接展示非列表时记错误日志并显示N/Atags→ 以;连接展示license→ 直接展示author→ 以,连接展示description→ 使用setMarkdown()以 Markdown 方式渲染从该实现可以看到gr-example_haakov.md 中的website: https://www.example.org、repo: https://github.com/haakov/gnuradio等字段会被直接显示为可点击的链接而---之后的描述文本则会以 Markdown 排版显示。四、为你的 OOT 模块编写 MANIFEST实战要点综合示例清单与 GRC 解析逻辑编写 MANIFEST 时应遵循以下要点标题与简介必须清晰title是浏览器列表项与日志中的唯一标识brief应一句话说明模块做什么。列表字段务必使用 YAML 列表语法author、copyright_owner、tags、gr_supported_version、dependencies必须写成以-开头的列表项否则会被 GRC 类型校验拒绝。描述放在---之后这是 GRC 特有约定见 oot_browser.py 中text.split(---)---后的内容支持基础 Markdown。可省略的可选字段留空如website、icon、dependencies若没有可留空GRC 侧会显示None不影响加载description留空时模板会尝试回退到 README。注明支持的 GNU Radio 版本与许可证gr_supported_version便于用户判断兼容性license应填写 SPDX 风格的许可证简称如GPLv3。图标用于 CGRAN 展示icon字段注释明确说明放入一个正方形图片 URL将用作 CGRAN 上的图标该字段不影响 GRC 本地浏览器展示。按以上要点一份最小可用的 MANIFEST 示例如下title: My OOT Module version: 1.0 brief: Signal processing blocks for my application tags: - dsp author: - Jane Doe janeexample.org copyright_owner: - Jane Doe license: GPLv3 gr_supported_version: - v3.10 repo: https://example.org/gr-myoot --- A longer description rendered as Markdown in the GRC OOT browser.将上述内容保存后放入 grc/gui_qt/resources/manifests 目录重启 GNU Radio Companion 并打开 OOT 浏览器界面窗口标题为 GRC OOT Modules见 oot_browser.py即可在左侧列表看到该模块右侧展示完整详情。五、与 GNU Radio 生态的衔接MANIFEST 清单并不是孤立的装饰文件它与 GNU Radio 的生态工具链有明确衔接CGRAN 社区示例清单中的icon字段注释gr-example_haakov.md和 OOT 浏览器界面资源oot_browser.ui 引用了cgran_logo.png表明MANIFEST 是面向 CGRANGNU Radio 官方 OOT 模块索引站点的元数据格式gr_modtool 模板新建模块时会自动生成待填写的 MANIFEST降低开发者上手成本版本化安装CMake 安装规则将 MANIFEST 按版本重命名安装确保模块升级时元数据可追溯见 gr-utils/modtool/templates/gr-newmod/CMakeLists.txt。六、结语从 gr-example_haakov.md 这份不足 20 行的示例清单出发本文完整还原了 GNU Radio OOT 模块 MANIFEST 文件的字段体系、模板生成与安装流程以及 GRC OOT 浏览器解析 → 校验 → 渲染的完整实现链路。当你着手发布自己的 OOT 模块时对照 MANIFEST.yml 模板、GRC 校验器 与 OOT 浏览器实现 三个文件即可编写出既符合规范、又能在 GRC 界面中优雅呈现的清单文件。赞分享通信科研【免费下载链接】gnuradioGNU Radio – the Free and Open Software Radio Ecosystem项目地址https://gitcode.com/gh_mirrors/gn/gnuradio点击查看免费下载相关推荐为类模块编写 TypeScript 声明文件module-class.d.ts 模板完全解析为类模块编写 TypeScript 声明文件module class.d.ts 模板完全解析 本指南以 module class.d.ts 模板 http文档教程AX 声明式清单编写指南用 ax.io/v1alpha1 清单声明 Agent 任务、工作区与模型AX 声明式清单编写指南用 ax.io/v1alpha1 清单声明 Agent 任务、工作区与模型 AXGoogle 的开源 Agent 编排运行时以声明人工智能AI AgentAgent 框架自主智能体TypeScript 模块插件声明文件编写指南module-plugin.d.ts 模板深度解析TypeScript 模块插件声明文件编写指南module plugin.d.ts 模板深度解析 本指南围绕 TypeScript 中文手册声明文件章节中的文档教程上一篇gh_mirrors/er/errors性能优化从开发到生产的全流程下一篇3 步拿到中小学电子教材 PDF智慧教育平台电子课本下载工具 tchMaterial-parser创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Model Weight Store Upload Planning:Mooncake Reshard 模型权重上传规划机制解析

Model Weight Store Upload Planning:Mooncake Reshard 模型权重上传规划机制解析

人工智能大模型模型推理服务后端 【免费下载链接】Mooncake Mooncake is the serving platform for Kimi, a leading LLM service provided by Moonshot AI. 项目地址: https://gitcode.com/gh_mirrors/mo/Mooncake 点击查看 免费下载 plan_weight_upload 将一份完…

2026/10/5 11:46:57 阅读更多 →
插件系统开发实战:从plugin.json到加载失败排查与安全隔离

插件系统开发实战:从plugin.json到加载失败排查与安全隔离

1. 从“plugins”这个标题说起:插件系统到底在解决什么问题“plugins”这个词看起来简单到几乎没什么可讲的,但如果你真正动手写过插件系统,或者维护过一个需要支持第三方扩展的工具链,就会知道这里面的水比想象中深得多。我最早接…

2026/10/4 10:45:22 阅读更多 →
AI工程从零到落地:Prompt、RAG与评估体系的实战指南

AI工程从零到落地:Prompt、RAG与评估体系的实战指南

1. 先搞清楚:AI工程到底在“工程”什么很多人一听到“AI工程”四个字,第一反应是“那不就是训练模型吗”或“搞一堆算法调参”。这其实是最大的误区。我做了几年AI落地项目后越发觉得,AI工程的核心根本不是让模型跑起来,而是让模型…

2026/10/5 11:25:05 阅读更多 →

最新新闻

3D打印Pre-IPO估值30亿背后:设备、材料与应用生态的决胜点

3D打印Pre-IPO估值30亿背后:设备、材料与应用生态的决胜点

刚刷到这条融资消息的时候,我第一反应不是“哇,30亿”,而是“Pre-IPO”这三个字比数字本身更有意思。苏州,3D打印,投前估值30亿,这几个词叠在一起,基本能确定一件事:这个行业已经从“…

2026/10/5 14:00:21 阅读更多 →
Shell脚本“No such file”报错排查与数组传参实践

Shell脚本“No such file”报错排查与数组传参实践

连载数据库巡检脚本的时候,最让人头疼的不是 SQL 写得有问题,而是 Shell 脚本本身莫名其妙地给你来一个 “No such file or directory”,然后整个任务就在那干瞪眼。这个报错长得特别像文件路径不存在,但你去查文件、查目录&#…

2026/10/5 14:00:21 阅读更多 →
OpenShell:Windows上的macOS Dock式任务栏增强工具

OpenShell:Windows上的macOS Dock式任务栏增强工具

1. OpenShell 不是 Shell,而是 Windows 上的“类 macOS Dock”视觉层很多人第一次看到 OpenShell 这个名字,下意识会以为它是某种 Linux 或 macOS 风格的终端替代品——毕竟名字里带 “Shell”,又和 WSL、Linux、macOS 这些词高频共现。但事实…

2026/10/5 14:00:21 阅读更多 →
RabbitMQ必须装Erlang?Windows下Erlang/OTP安装与版本匹配全攻略

RabbitMQ必须装Erlang?Windows下Erlang/OTP安装与版本匹配全攻略

很多第一次接触RabbitMQ的人,大概率都经历过同一个场面:高高兴兴下载了 rabbitmq-server-4.3.6.exe ,双击之后还没看到安装界面,就先弹出一个提示——"请先安装Erlang/OTP"。那一刻你会想:这个Erlang到底是…

2026/10/5 14:00:21 阅读更多 →
【Windows包管理器Scoop迁移避坑指南:两种方案彻底解决C盘空间焦虑】

【Windows包管理器Scoop迁移避坑指南:两种方案彻底解决C盘空间焦虑】

导语:C盘飘红、系统重装、换新电脑——Scoop迁移总是伴随着环境变量混乱、软件无法启动、shim失效等一连串问题。本文提供两种经过实战验证的迁移方案,帮你一次性彻底搞定Scoop迁移。 目录 为什么Scoop迁移这么难?迁移前的准备工作方案一&am…

2026/10/5 14:00:21 阅读更多 →
BranchIP:自适应等变计算驱动的原子间势能建模新范式

BranchIP:自适应等变计算驱动的原子间势能建模新范式

1. 项目概述:为什么“自适应等变计算”正在重构原子间势能建模的底层逻辑BranchIP这个名字乍看像某个冷门开源库的代号,但拆开来看——Branch(分支)、IP(Interatomic Potential,原子间势能)——…

2026/10/5 13:59:21 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

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

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

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

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/4 20:14:29 阅读更多 →