YoC组件开发系列三: YoC YMAL规范(一)

简介: 一、前言YoC物联网操作系统是基于组件化开发,所有的组件用YAML文件统一管理。利用YAML简洁丰富的数据形态,可以方便的对组件的C文件和H文件进行结构化管理。CDK和yoctools都支持去YAML文件的支持,可以利用YAML脚本对整个系统进行组件结构化管理和维护。 YAML里的语法众多,但在YoC YAML语法只是用到了其中的一部分,为了防止开发者滥用不支持的YAML语法,我们定义了YoC YAML语法规范,CDK和yoctools都必须遵循YoC YAML语法。

一、前言
YoC物联网操作系统是基于组件化开发,所有的组件用YAML文件统一管理。利用YAML简洁丰富的数据形态,可以方便的对组件的C文件和H文件进行结构化管理。CDK和yoctools都支持去YAML文件的支持,可以利用YAML脚本对整个系统进行组件结构化管理和维护。 YAML里的语法众多,但在YoC YAML语法只是用到了其中的一部分,为了防止开发者滥用不支持的YAML语法,我们定义了YoC YAML语法规范,CDK和yoctools都必须遵循YoC YAML语法。

二、YAML简介
YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。 YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。 YAML 的配置文件后缀为 .yml,如:runoob.yml 。

基本语法
大小写敏感
使用缩进表示层级关系
缩进不允许使用tab,只允许空格
缩进的空格数不重要,只要相同层级的元素左对齐即可
'#'表示注释
数据类型
YAML 支持以下几种数据类型:

对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
纯量(scalars):单个的、不可再分的值
三、YoC YAML语法
YoC YAML语法主要包括一下六个部分, 具体语法会在YoC YAML规范介绍二详细介绍。

组件定义
说明文档
描述文件
存储约定
硬件信息
Chip 组件
Board 组件
Solution 组件
组件配置
组件变量
内置变量
配置项变量
组件分类
Board类别
Chip类别
Solution类别
Common类别
组件编译选项作用域
四、YoC组件管理
YoC组件利用YAML脚本来管理该组件的C文件和H文件。 以KV组件为例,其主要有三部分组成:

C文件和H文件
README说明文档
package.yaml文件
.
├── block.c
├── cli_kvtool.c
├── include
│ ├── aos
│ │ └── kv.h
│ ├── block.h
│ └── kvset.h
├── kv_aos.c
├── kvset.c
├── package.yaml
└── README.md

package.yaml文件里的

第一部分: 基础信息

name: kv # <必选项> 包名称 (符合C语言变量命名规则),长度少于等于64字节
version: v7.4.y # <必选项> 组件版本号
description: 一个以Key-Value方式进行持久化存储的轻量级组件 # <必选项> 建议至少20字以上
type: common # <必选项> 组件类型,为:solution, chip, board, common, sdk
tag: 核心模块 # <可选项> 组件分类,缺省值: ''
keywords: # <可选项> 标签,会影响到组件被搜索的效果,合理的标签很重要

  • filesystem

license: Apache license v2.0 # <可选项> 源代码的许可证,要确保所有代码、文件的许可证不冲突。如:MIT,Apache license v2.0,BSD

第二部分:依赖信息

指定该组件依赖的组件及版本,版本支持条件比较,支持:>=v1.0, >v1.0, ==v1.0, <=v1.0, <v1.0, v1.0

未指定条件时,默认为 ==,如 v1.0 与 ==v1.0

sdk_chip: # <可选项> 该组件依赖sdk组件,合理的依赖才能保证组件能编译、使用

- sdk_chip_csky_dummy: v7.4.y

- sdk_chip_riscv_dummy: v7.4.y

depends: # <可选项> 该组件依赖其他的组件,合理的依赖才能保证组件能编译、使用

- minilibc: v7.2.0

- aos: >=v7.2.0

第四部分:编译连接信息

build_config: # <可选项> 编译配置项

include: # <可选项> 编译时,影响编译器的-I 参数 ,全局有效

- src # include 只能是该软件包下的目录,不能使用外部目录

internal_include: # <可选项> 编译时,影响编译器的-I 参数 ,组件内有效

- include

cflag: '' # <可选项> C 编译器所需要要的编译参数

cxxflag: '' # <可选项> CXX 编译器所需要要的编译参数

asmflag: '' # <可选项> 汇编器所需要要参数

define: # <可选项> 宏定义, 增加编译器的-D 选项,如:

XXX: 1 # -DXXX=1

AAA: 1 # -DAAA

STR: "abc" # -DSTR="abc"

libs: # 该组件中支持的二进制静态库,如:libxxx.a, libyyy.a

- xxx # -lxxx

- yyy # -lyyy

libpath: # 指定静态库所在的路径(相对于该组件路径)

- libs # -Llibs

build_config:
include:

- include

source_file: # <可选项> 指定参与编译的源代码文件,支持通配符,采用相对路径

- src/*.c # 例:组件 src 目录下所有的扩展名为 c 的源代码文件

source_file:

  • block.c
  • kvset.c
  • kv_aos.c
  • cli_kvtool.c ? <AOS_COMP_CLI>

第五部分:配置信息

def_config: # 组件的可配置项

CONFIG_DEBUG: y

CONFIG_PARAM_NOT_CHECK: y

CONFIG_CLI: y

第六部分:安装信息

install:

- dest: include/ # 安装的目的路径 dest是相对路径,通常是相对于YoC SDK 安装目录

source: # 安装源列表

- src/*.h # 支持通配符,相对路径

install:

  • dest: "include/"
    source:

    - "include/*.h"
    

第七部分:导出部分

export:

- dest: "<SOLUTION_PATH>/generated/data" # 安装的目的路径 dest是相对路径

source: # 安装源列表

- "bootimgs/boot"

- "bootimgs/tee"

- "bootimgs/mtb"

- "configs/config.yaml"

package.yaml脚本内容主要分为七个部分:

基础信息
包含对组件基本信息的描述,包含组件版本,功能缩写,标签以及License等信息。

依赖信息
包含对组件的版本依赖,没有就忽略该部分

编译链接信息
包换H文件目录的搜索路径和需要编译的C文件、以及库文件的搜索路径等。

配置信息
包括系统配置,用户配置宏定义,其以-Dxxxx的方式传入编译文件

安装信息(不用可忽略)
类似make install功能,包换安装的路径等。

导出信息(不用可忽略)
包含镜像文件导出信息等。

相关文章
|
移动开发 JavaScript Oracle
Oracle根据汉字取拼音首字母的function
Oracle根据汉字取拼音首字母的function
9919 0
|
监控 网络协议 Java
分布式链路追踪- SkyWalking使用手册
分布式链路追踪- SkyWalking使用手册
2764 0
分布式链路追踪- SkyWalking使用手册
|
7月前
|
存储 人工智能 自然语言处理
2025主流AI外呼产品深度评测,一文看懂企业外呼Agent选型
在数字经济深化发展背景下,AI外呼已成为企业提升客户沟通效率、实现降本增效的关键工具。随着行业向大模型驱动、全链路智能化、场景化适配与合规安全升级等趋势演进,企业需构建涵盖业务适配性、交互体验、成本效益、合规能力等多维度的选型体系。本文系统对比了瓴羊Quick Service、得助智能、沃创云、中关村科金、Voicefox五款主流AI外呼产品,分析其在语音交互、场景覆盖、合规保障及部署模式等方面的差异。根据不同企业需求,提出针对性选型建议。
|
人工智能 调度 芯片
《大模型背后的隐形战场:异构计算调度全解析》
在大模型训练中,CPU、GPU和AI芯片各司其职:CPU擅长逻辑控制,GPU专攻并行计算,AI芯片则针对特定AI任务优化。然而,实现三者的高效协同面临诸多挑战,如任务分配、通信延迟及资源管理等问题。通过动态任务分配、通信优化与资源调整等策略,可提升训练效率。未来,随着硬件进步和算法智能化,异构计算协同调度将更加高效,并结合云计算、边缘计算等技术拓展应用范围,推动人工智能技术发展。
791 15
|
人工智能 固态存储 iOS开发
5分钟搞定Photoshop 2025安装:官方下载+许可证激活避坑指南
Adobe Photoshop 2025 是 Adobe 公司推出的最新图像处理软件,广泛应用于平面设计、摄影后期和 UI 设计等领域。其核心功能包括智能 AI 工具(一键抠图、生成填充等)、高效工作流(优化图层管理与色彩调整)、跨平台兼容(支持 Windows 11 和 macOS 15)以及云协作功能(与 Adobe Creative Cloud 集成)。本文详细介绍软件的安装流程、系统要求、正版激活方法及常见问题解决方案,并提供扩展学习资源,帮助用户更好地掌握这款强大工具。
51056 3
|
10月前
|
JSON 监控 前端开发
如何开发门店业绩上报管理系统中的销售计划板块?(附架构图+流程图+代码参考)
门店业绩上报不仅是记录销售数据,更是公司目标传达、资源分配与激励设计的关键环节。本文全面解析销售计划板块的构建,涵盖功能拆解、业务流程、技术架构及开发技巧,并提供上线后的运营建议与代码参考,助力企业实现高效门店管理与目标追踪。
|
数据可视化 数据挖掘 BI
MATLAB学习之旅:数据统计与分析
在MATLAB中,我们掌握了数据导入、处理及插值拟合等基础技能。接下来,我们将深入数据统计与分析领域,学习描述性统计量(如均值、标准差)、数据分布分析(如直方图、正态概率图)、数据排序与排名、数据匹配查找以及数据可视化(如箱线图、散点图)。这些工具帮助我们挖掘数据中的有价值信息,揭示数据的奥秘,为后续数据分析打下坚实基础。
|
机器学习/深度学习 人工智能 运维
智能日志分析:用AI点亮运维的未来
智能日志分析:用AI点亮运维的未来
4768 15
|
编解码 前端开发 JavaScript
跨平台兼容性
【10月更文挑战第31天】跨平台兼容性
739 2
|
Rust 前端开发 JavaScript
前端性能革命:WebAssembly在高性能计算中的应用探索
【10月更文挑战第26天】随着Web应用功能的日益复杂,传统JavaScript解释执行模式逐渐成为性能瓶颈。WebAssembly(Wasm)应运而生,作为一种二进制代码格式,支持C/C++、Rust等语言编写的代码在浏览器中高效运行。Wasm不仅提升了应用的执行速度,还具备跨平台兼容性和安全性,显著改善了Web应用的响应速度和用户体验。
557 4