技术解码 | YoC组件开发系列三: YoC YAML规范(一)

简介: 技术解码栏目:是面向开发者详细解读芯片开放社区(OCC)上关于处理器、芯片、基础软件平台、集成开发环境及应用开发平台的相关技术,方便开发者学习及快速上手,提升开发效率。

编辑语:

技术解码栏目:是面向开发者详细解读芯片开放社区(OCC)上关于处理器、芯片、基础软件平台、集成开发环境及应用开发平台的相关技术,方便开发者学习及快速上手,提升开发效率。


有关YoC组件开发,在前两期【技术解码】中我们已经为大家介绍了如何向OCC发布芯片产品组件,以及如何快速将YoC Makefile工程转换为YoC CDK工程本文是该系列内容的第三篇,主要为大家简单讲解我们定义的YoC YAML语法规范,方便大家更好的利用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


1.基本语法

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释


2.数据类型

YAML 支持以下几种数据类型:

  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
  • 纯量(scalars):单个的、不可再分的值


三 YoC YAML语法

YoC YAML语法主要包括下六个部分, 具体语法会在YoC YAML规范介绍(二)中详细介绍。


1.组件定义

  • 说明文档
  • 描述文件
  • 存储约定


2.硬件信息

  • Chip 组件
  • Board 组件
  • Solution 组件


3.组件配置


4.组件变量

  • 内置变量
  • 配置项变量


5.组件分类

  • Board类别
  • Chip类别
  • Solution类别
  • Common类别


6.组件编译选项作用域


四 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:                                           # <可选项> 标签,会影响到组件被搜索的效果,合理的标签很重要
  - filesystemlicense: 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功能,包含安装的路径等。


⑥ 导出信息(不用可忽略)

包含镜像文件导出信息等。




相关文章
|
6月前
|
存储 JSON JavaScript
【YAML语法规范指南】从入门到精通,揭秘神秘语法,引领配置文件解析指南(基础结构篇)
"YAML Ain't Markup Language"(简称YAML)是一种专为人类设计的数据序列化语言,适用于多种现代编程语言,可广泛应用于各类日常任务。它是一种以人类可读形式呈现的、适用于多种语言的Unicode数据序列化标准。它基于敏捷编程中常见的本地数据结构,广泛应用于配置文件、互联网消息传递、对象持久化以及数据审计等多个领域。遵循Unicode标准、
668 8
【YAML语法规范指南】从入门到精通,揭秘神秘语法,引领配置文件解析指南(基础结构篇)
|
JavaScript 数据库
codemirror+js-yaml实现YAML格式的文本编辑器以及校验YAML格式是否符合规范的实现
codemirror+js-yaml实现YAML格式的文本编辑器以及校验YAML格式是否符合规范的实现
2993 0
|
存储 编译器 API
技术解码 | YoC组件开发系列四: YoC YAML规范(二)
技术解码栏目:是面向开发者详细解读芯片开放社区(OCC)上关于处理器、芯片、基础软件平台、集成开发环境及应用开发平台的相关技术,方便开发者学习及快速上手,提升开发效率。
270 0
|
XML Java 数据格式
|
2月前
|
JSON Kubernetes API
深入理解Kubernetes配置:编写高效的YAML文件
深入理解Kubernetes配置:编写高效的YAML文件
|
5月前
|
存储 运维 Serverless
函数计算产品使用问题之在YAML文件中配置了环境变量,但在PHP代码中无法读取到这些环境变量,是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
1月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
|
1月前
|
Kubernetes Docker Perl
k8s常见故障--yaml文件检查没有问题 pod起不来(一直处于创建中)
k8s常见故障--yaml文件检查没有问题 pod起不来(一直处于创建中)
|
1月前
ingress相关yaml文件报错且相关资源一切正常解决方法
ingress相关yaml文件报错且相关资源一切正常解决方法
ingress相关yaml文件报错且相关资源一切正常解决方法
|
4月前
|
运维 Kubernetes Serverless
Serverless 应用引擎使用问题之s.yaml文件中如何使用外部环境变量
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。