编辑语:
技术解码栏目:是面向开发者详细解读芯片开放社区(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功能,包含安装的路径等。
⑥ 导出信息(不用可忽略)
包含镜像文件导出信息等。