GNU Radio OOT 模块 MANIFEST 清单:以 gr-example_haakov 为范例的声明文件编写与解析全指南

发布时间:2026/10/4 10:46:37
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),仅供参考