编辑语:
芯片开放社区(OCC)面向开发者推出RISC-V系列内容,通过多角度、全方位解读RISC-V,系统性梳理总结相关理论知识,构建RISC-V知识图谱,促进开发者对RISC-V生态全貌的了解。
在前几期内容中,我们为大家介绍了YoC基础软件平台及其五大组件对RISC-V生态开发的支持。RISC-V生态的成长与发展还需要更多开发者的参与,YoC基础软件平台也亟待更多开发者加入开发并开源。因此,本期内容我们将为大家具体介绍如何上传组件到OCC进行开源。
# 修改历史
- 更改product组件为产品组件
- 更新组件添加页面为最新页面
# 开源须知
开发者和厂商贡献产品解决方案或组件,需要明确以下事项:
- 以邮件的方式明确平头哥YoC管理员需要开源的组件和组件管理员信息。
- 产品解决方案不放在OCC上,需要发邮件给平头哥管理员进行审批, 通过后以通用组件的方式开源 。
- 明确组件代码是否涉及GPL等协议,如果涉及GPL等协议,不接收该组件。但可通过文档说明的方式,确保利用该组件做产品的开发者或厂商能找到组件管理员。
- 针对内部开发者贡献的新组件和新解决方案,开发者自行走集团开源方案,通过后邮件通知平头哥YoC管理员。
- 平头哥YoC管理员负责把组件和解决方案推到GITEE或GITHUB官网。
注意:平头哥YoC管理员邮箱为: cxx194832@alibaba-inc.com, shuta.lst@alibaba-inc.com
01 组件组成
所有组件名字不可重复,名字规范为C语言变量的命名规则,不可超过64字节长度。原则上都采用小写。
- chip组件
至少包括include, src, package.yaml,README.md
命名规则:xxxx_chip (xxxx为芯片名字/型号), 位于components下。
- board组件
至少包括include, src, config, package.yaml,README.md
命名规则:xxxx_[cpuX]_evb(xxxx为芯片名字/型号;在多核的情况下,X为序号,从0开始), 位于board下。
- drv组件(common组件类型)
至少包括include, src, package.yaml,README.md
命名规则:drv_[xxxx]_yyyy (xxxx为IP名字,比如wifi, yyyy为芯片名字/型号), 位于components下。
- solution组件
至少包括app, Makefile, SCconstruct, package.yaml,README.md
命名规则:一般能指明这是个solution即可。
- 如果是demo,一般命名为xxx_[cpuX]_demo,比如wifi_demo。在多核的情况下,X为序号,从0开始
- 如果是平台方案实现,一般命名为xxxx_[cpuX]_function, 比如sc5654_boot。在多核的情况下,X为序号,从0开始
- common组件
至少包括include, src, package.yaml,README.md
命名规则:唯一, 位于components下。
- 虚拟组件
虚拟组件本身没有代码实现,只是用于把相关的组件归类在一起。
至少包括 package.yaml,README.md
目前YoC里支持的虚拟组件有:
- sdk_chip_xxxx
芯片SDK虚拟组件包括芯片驱动,基本内核,常用的功能CLI, KV等组件。开发者可以直接在此基础之上进行二次开发。
- sys_ble
BLE子系统,包括蓝牙协议栈和蓝牙服务等功能
- sys_wifi
WiFi子系统,包括无线协议栈和WiFi服务等功能
- sys_voice
语音子系统,包括播放器,MIC, RECORD等功能
- sys_security
安全子系统包括密钥管理、SSL协议栈,算法库等功能
- sdk_app_xxxx
解决方案虚拟组件包括芯片所有的解决方案和DEMO
一般情况下,一个解决方案由芯片SDK虚拟组件、子系统以及第三方SDK组成。
02 组件开发
开发者可以利用剑池CDK和yoctools进行组件开发,通过下列方式进行安装剑池CDK或yoctools
- 通过剑池CDK安装包进行安装
- sudo pip install yoctools
2.1 剑池CDK开发
2.1.1 获取解决方案
打开剑池CDK进入主界面,选择Project->New IoT Project根据提示, 选择对应开发板的解决方案。
2.1.2 获取目标组件
单击home工具图标进入"show welcome page",输入目标组件名字搜索,找到组件后选择下载,添加完成后,在工程窗口package节点下可以看到添加的组件。
2.1.3 创建开发仓库
开发者获取解决方案或组件代码后,可以根据自身的需求在代码托管平台上创建组件开发仓库,进行组件开发。
2.1.4 开发组件功能
开发者在开发过程中提交代码到组件开发仓库,直到组件功能完成。
2.1.5 贡献发布组件
开发者将组件贡献合入YoC,需要按照以下章节3进行操作。
2.2 yoctools开发
2.2.1 获取解决方案
根据已经发布的解决方案版本,开发者可以根据以下命令获取解决方案, 比如开发者想利用v7.4.0版本helloworld解决方案进行开发,可以通过以下命令获取:
yoc init yoc install helloworld -b v7.4.0
2.2.2 获取目标组件
根据已经发布的组件版本,开发者可以根据以下命令获取目标组件, 比如开发者想利用v7.4.0版本kv解决方案进行开发,可以通过以下命令获取:
yoc install kv -b v7.4.0
2.2.3 创建开发仓库
开发者获取解决方案或组件代码后,可以根据自身的需求在代码托管平台上创建组件开发仓库,进行组件开发。
2.2.4 开发组件功能
开发者在开发过程中提交代码到组件开发仓库,直到组件功能完成。
2.2.5 贡献发布组件
开发者将组件贡献合入YoC,需要按照以下章节3进行操作。
03 组件提交
开发者贡献组件给YoC,需要根据新增组件和现有组件分别处理。
对于需要创建新组件仓库,分为两种情况:
- 提交组件开发者邮箱、组件功能描述等信息给平头哥管理员,由管理员进行统一创建GITEE组件仓库。
- 可以自行创建组件GITEE仓库,但需要将组建仓库地址提交给平头哥管理员进行仓库管理。
为了满足产品发布需要,如果遇到YoC公共组件修改的情况,可以先创建组件分支,先进行发布,发布后需要和组件Owner进行讨论沟通,确认合入组件主干的计划。
3.1 新增组件
- 内部开发者向YoC仓库管理员申请AONE组件新仓库(默认新建仓库包含master分支, 发布分支需要组件管理者自行创建)。
- 外部开发者向YoC仓库管理员申请GITEE组件新仓库(默认新建仓库包含master分支,发布分支需要组件管理者自行创建)。
- 外部开发者向YoC仓库管理员提供已经申请好的新仓库地址(默认新建仓库包含master分支,发布分支需要组件管理者自行创建)。
开发者将组件代码提交到新组件仓库的master分支和DEV分支,然后将代码上传到master分支和dev分支,打上标签进行发布,标签遵循vX.Y.Z版本规则,初始版本号组件管理员自己定义。
3.2 现有组件
- 内部开发者提交组件代码到AONE现有组件仓库开发分支上,组件管理员根据需要评估合入方式,测试通过后,直接打上标签进行发布。
- 外部开发者提交组件代码到GITEE现有组件仓库DEV分支上,组件管理员根据需要评估合入方式,测试通过后,打上标签进行发布。
04 组件测试
开发者提交组件代码到组件仓库,会触发组件CI测试,根据新增组件和现有组件,组件CI测试用例处理不同。
组件CI系统在测试完成后会自动发邮件给组件管理员,组件管理员可以登录代码托管组件仓库查看测试结果。
4.1 新增组件
- 内部开发者提交组件代码到AONE的组件开发分支前,需要和组件测试管理员讨论新组件自动化测试用例,保证新组建提交到组件开发分支上会触发CI组件自动化测试
- 外部开发者提交组件代码到GITEE的组件开发分支
- 如果组件管理员是外部开发者,组件管理员自行保证组件功能测试。
- 如果组件管理员有平头哥内部人员,需要和组件测试管理员讨论新组件自动化测试用例,保证新组件提交到组件开发分支上会触发CI组件自动化测
4.2 现有组件
- 更新组件功能代码
- 内部开发者提交组件到AONE的组件开发分支或新增分支,会触发CI组件自动化测试。
- 外部开发者提交组件到GITEE的组件开发分支或新增分支,会触发CI组件自动化测试。
- 扩展组件功能代码
- 内部开发者提交组件代码到AONE的组件分支或新增分支前,需要和组件测试管理员讨论扩展组件功能自动化测试用例,保证组件提交到组件开发分支上会触发CI组件完整自动化测试
- 外部开发者提交组件代码到GITEE的组件分支或新增分支,
- 如果组件管理员是外部开发者,组件管理员自行保证组件功能测试。
- 如果组件管理员有平头哥内部人员,需要和组件测试管理员讨论扩展组件功能自动化测试用例,保证组件提交到组件开发分支上会触发CI组件完整自动化测试
05 组件合入
- 提交组件测试通过,则开发者通过pull request 请求合入组件仓库开发分支,组件管理员决定何时发布。具体pull request流程请参考https://gitee.com/help/articles/4133
- 提交组件测试不通过,则组件管理员拒绝合入和取消请求,邮件通知开发者测试结果,要求修改后重新提交。
新组件合入组件仓库后,需要通知仓库管理员在manifest仓库加入该新组建,确保外部能够正确获取。
06 组件发布
6.1 通过剑池CDK发布
注意:通过剑池CDK发布的组件是以ZIP包的方式上传到OCC上,并非上传到组件仓库。
6.1.1 添加common组件
- 步骤一 进入我的发布
单击home工具图标进入"show welcome page",进入我的发布,
- 步骤二 上传common组件
点击右上角的"上传本地组件"按钮,选择本地的需要发布的common组件,上传成功。
- 步骤三 查看发布common组件
点击左侧的"组件资源",可以看到发布的组件已在其中。
6.1.2 添加产品组件
- 步骤一 登录OCC账户
只有具备企业资质认证的账户才能发布产品组件,否则无权限发布。
- 步骤二 进入我的发布
单击home工具图标进入"show welcome page",进入我的发布,
- 步骤三 上传产品组件
点击右上角的"上传本地组件"按钮,选择本地的需要发布的产品组件,上传成功。
- 步骤四 查看发布产品组件
点击左侧的"我的发布"->我的方案,可以看到发布的产品组件已在其中。
6.2 通过控制台发布
6.2.1 添加Common组件
- 步骤一 登录OCC,进入OCC控制台
- 步骤二 点击左侧组件管理菜单,点击右侧新增按钮
- 步骤三 点击选择GITEE添加方式,依次填写组件名称和仓库组件地址,最后确定即可
6.2.2 添加产品组件
- 步骤一 登录OCC,进入OCC控制台
- 步骤二 点击芯片管理,进入芯片管理页面
- 步骤三 选择产品,点击编辑按钮,进入产品详细页
- 步骤四 选择组件TAB,点击上传组件
- 步骤五 点击选择GITEE添加方式,依次填写组件名称和仓库组件地址,最后确定即可
6.2.3 组件仓库信息同步
一旦组件的仓库发生变动,比如新的版本发布,新的分支建立,新的TAG添加等,OCC的组件管理服务不会主动去拉取组件仓库信息(原因是GITEE对组件的仓库刷新次数有日限制), 需要组件管理员人为的在OCC控制台的组件管理项对更新的组件进行刷新。
07 组件仓库消息设定
7.1 关注仓库
点击右上角的Starred图标来关注该仓库。
7.2 消息设置
添加个人账户里的邮箱设置填写你的邮箱地址。
7.3 通知设置
在通知设置里把邮箱通知的相关内容打上勾。具体参考 https://gitee.com/profile/notifications。
08 注意事项
分支或者TAG名称和package.yaml中的version字段要匹配。