第六步介绍产品基本功能调试通过后,如何打包量产版本固件及OTA部署。
1. 概述
为了给予客户更方便的产品定制能力,规范固件版本,规避构建风险,也为了加快客户的开发、迭代速度,您可以在 天猫精灵AI平台 上直接触发构建、OTA 推送等。
天猫精灵开放平台:www.aligenie.com 天猫精灵开放平台文档中心:www.aligenie.com/docs/ai/home 天猫精灵AI平台(星空平台):product.aligenie.alibaba-inc.com/v2/project/list
在使用自主构建之前,需要按照第二步先在星空平台上创建自己的产品。
2. 创建代码仓库
代码必须托管到 codeup 上,更多的操作,例如代码合并审核、代码权限管理等,请参考官网说明。本章节简单指引如何创建代码仓库。
云效代码管理 Codeup 文档官网:https://help.aliyun.com/document_detail/153402.html
:::warning 1、codeup上创建的代码工程是由您主导维护,三方共享的。您的闭源代码请自行维护,把构建结果(.a/.h)等放进thirdparty_app代码工程即可。
2、为了将阿里的代码仓库和方案商的代码仓库解耦开来,也为了避免阿里这边代码更新影响线上线上产品版本迭代。阿里这边提供的所有仓库都需要在自建企业里创建对应的仓库,后续平台构建,将会全部拉取方案商的代码仓库,不直接拉取阿里代码仓库。 :::
2.1 创建项目团队
建议不同项目以团队隔离,当然您也可以选择一个团队管理多个项目,直接跳过此章节。
2.2 创建仓库分组
分组是为了方便管理,建议针对TG6000A和TG6210A两个不同的芯片平台单独创建代码组。如下所示,创建以TG6000A命名的代码组。
2.3 创建代码仓库
代码工程的每个仓库都需要有单独仓库托管,本文以创建aligenieSDK仓库作为示例。
2.4 上传代码
一般情况下获取到的代码都已经有本地仓库,只需要添加 remote 即可直接推送。
$ git remote add codeup git@codeup.aliyun.com:XXXXXXX/XXXX/XXXX.git #仓库地址
$ git push codeup master
3. 创建manifest
请务必支持 repo 命令抓取整个工程代码。要支持 repo 命令,需要额外创建个名为 manifest 的代码仓库,并撰写 manifest.xml 上传。
下文以TG6000A平台的manifest.xml 的示例进行演示。TG6210A平台根据对应manifest.xml对应修改即可。
<manifest>
<remote name="codeup" fetch="ssh://git@codeup.aliyun.com/xxx" review="https://codeup.aliyun.com"/>
<default remote="codeup" revision="master" sync-j="4" sync-c="true" sync-tags="false"/>
<!-- BSP -->
<project path="toolchain" name="bsp/toolchain" />
<project path="kernel" name="bsp/kernel" />
<project path="vendor" name="bsp/vendor" />
<project path="build" name="bsp/build" />
<project path="component" name="bsp/component" />
<!-- GENIE -->
<project path="aligenieSDK_alg" name="genie/aligenieSDK_alg" />
<project path="project" name="genie/project" />
<project path="aligenieSDK" name="genie/aligenieSDK" >
<copyfile dest="build.sh" src="scripts/build_TG6000A.sh"/>
</project>
<!-- ISV -->
<project path="thirdparty_app" name="vendor/thirdparty_app" />
</manifest>
假设在 codeup 上仓库地址为:
https://codeup.aliyun.com/1234567890abcdefg/bsp/package.git
# https://codeup.aliyun.com/1234567890abcdefg:仓库远程路径
# bsp:仓库分组组名
# package:仓库名
则对应 remote 的 fetch 字段为:
<remote ... fetch="ssh://git@codeup.aliyun.com/1234567890abcdefg" ...>
而 project 项的 name 字段为:
<project ... name="bsp/package" ...>
编辑好 manifest.xml 并上传至 manifest 仓库之后,即可用以下命令下载完整代码:
repo init -u <manifest仓库url> -m <manifest文件名.mxl> -b master
repo sync
repo start --all <分支名>
xml文件撰写完成,请先在本地下载代码并编译验证通过,然后将xml文件发给阿里进行审核提交。不同产品使用不同的xml文件,为了更好的区分,xml文件命名请按如下规则
<芯片平台>_release_<ISV英文名或拼音>_<产品品牌名英文名或拼音>_<品类拼音>_<产品型号>.xml
比如ALBB这家方案商使用tg6000a芯片平台为品牌商TT研发了一款马桶,其型号为c1c,那么对应xml文件名可以是这样:tg6000a_release_ALBB_TT_matong_c1c.xml
4. 创建钉钉群通知助手
平台构建的过程、结果以及中间产物都通过 钉钉群机器人 通知和发布。下图是构建成功时的发布消息示例。
具体的创建步骤如下。
- 选择一个钉钉群,进入 群设置 -> 智能群助手 -> 添加机器人 页面。
- 选择 自定义(通过Webhook接入自定义服务)。
- 安全设置只选择 自定义关键词,并把关键词设置为
**starry**
。其余参数保持默认值即可,如下图所示。
- 最后的页面出现 Webhook 字段的地址链接。链接的最后一个字段就是钉钉助手Token,长度为 64 字节。
5. 创建加密的 ssh 私钥
创建加密的 ssh 私钥有3个步骤:
- 自行准备 ssh 私钥
- 加密私钥
- 上传至星空平台
请自行准备 ssh 私钥,确保此私钥可用于下载 《猫芯方案:创建代码工程》指南创建的代码工程。为了避免因为意外泄漏密钥造成损失,我们在提交前需要再次加密。原文请自行保存管理,只需要把再次加密后的 Key 上传。
加密工具在以下路径:
<Project-TOP>/aligenieSDK/scripts/encrypt
执行方法如下:
./encrypt <待加密的文件路径> <输出的加密文件路径>
例如:
./encrypt ~/.ssh/id_rsa ./sshkey.enc
加密后的key不需要压缩,直接上传至星空平台即可。详细参考下文 6.5 其他构建配置 。
6. 创建加密的OTA签名公私钥
为了保证 OTA 的合法性,在每次 OTA 时都会校验升级包。本文指导客户创建自己的签名公钥和密钥。
- 避免被恶意攻击,每个客户都需要有自己的独立的公钥和密钥
- 在星空平台上触发构建会检查公钥和密钥是否存在,如果没有会强制异常退出
- 密钥一旦已经量产使用,不可再修改,否则已量产版本无法 OTA
6.1 创建签名公私钥
创建 Key 命令:
openssl genrsa -out private.pem 2048 openssl rsa -in private.pem -outform PEM -pubout -out public.pem
执行后当前目录分别有公钥和私钥:
- 私钥:private.pem
-
6.2 加密签名公私钥
为了避免因为意外泄漏密钥造成损失,我们在提交前需要再次加密。原文请自行保存管理,谨防丢失。只需要把再次加密后的 Key 上传。
加密工具在以下路径:/aligenieSDK/scripts/encrypt
执行方法如下:./encrypt <待加密的文件路径> <输出的加密文件路径>,例如:./encrypt ./private.pem ./private.pem.enc
./encrypt ./public.pem ./public.pem.enc
7. 触发平台构建
7.1 构建入口
正式量产的固件必须从 天猫精灵AI平台 构建。以下是常规进入产品构建页面的方法。
在产品构建界面可以触发构建,也可以查看到之前的构建记录,以及跳转到 OTA 升级页面的链接。7.2 定制音量
7.3 定制提示音
提示音ID 对应产品上的提示音编号,详情 对应提示音的文本内容。定制的提示音会对应 ID 覆盖原始的提示音。 :::tips 设备端的提示音文件路径: /data/prompt/.mp3 ,其中 `` 号表示提示音 ID
设备端可通过命令: ag_play /data/prompt/xx.mp3 的形式播放验证 :::7.4 构建参数
7.4.1 固件类型
Debug:用于调试压测的版本,对应版本号 X.X.X-D-XXXXXXXX.XXXX
- Release:用于正式量产的版本,对应版本号 X.X.X-S-XXXXXXXX.XXXX
- Release比Debug版本有更少的日志,更多的兜底措施,更多的安全检查等
7.4.2 固件说明
只用于钉钉群通知助手,在中间产物通知时会带上此信息。7.4.3 机器人token
上文 章节4. 创建钉钉群通知助手 获取的 Token。7.5 其他构建配置
:::tips 其他构建参数可能随着产品迭代有增删、修改,如果发现文档与实际不匹配,可以找阿里要新文档。 :::
** | 参数描述 |
---|---|
下载代码使用的 Manifest | 创建代码工程时创建的 manifest.xml,提供给阿里后可获得此文件名 |
使用的唤醒包名 | 使用的唤醒包,默认留空或者填写tmjl,参考下文 定制唤醒词 |
使用的离线指令包名 | 使用的离线指令包,默认留空或者填写”all”,参考下文 定制离线命令词 |
下载代码的ssh私钥 | - 上文 创建加密的ssh私钥 - 此文件不需要压缩,但必须加密 |
OTA鉴权公钥 | - 上文 创建加密OTA签名公私钥 - 此文件不需要压缩,但必须加密 |
OTA鉴权私钥 |
7.6 开始构建
上图点击 确认 后即可触发构建。一般情况下,平台会保存记录上一次的配置状态和信息。由于构建一次时间比较长,避免浪费时间,在触发构建前最好确认一遍构建配置。触发构建后,常见会有以下几种构建状态。
7.7 定制唤醒词
定制唤醒词需要联系阿里商务洽谈导入。
7.8 定制离线命令词
定制离线词,目前仅支持TG6000A平台,目前仅支持集成灶、马桶、按摩椅3个品类,这3个品类的产品如果需要使用离线词功能,在构建配置中使用的本地指令包名填入品类的汉语拼音即可:jichengzao、matong、anmoyi。
:::tips
默认选项为全行业版本,仅供开发调试使用,不可用于量产。
其它品类的离线词需求,需要联系阿里商务洽谈导入。
:::