第六步介绍产品基本功能调试通过后,如何打包量产版本固件及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 创建项目团队

建议不同项目以团队隔离,当然您也可以选择一个团队管理多个项目,直接跳过此章节。
image.pngimage.pngimage.png

2.2 创建仓库分组

分组是为了方便管理,建议针对TG6000A和TG6210A两个不同的芯片平台单独创建代码组。如下所示,创建以TG6000A命名的代码组。
image.png
image.png

2.3 创建代码仓库

代码工程的每个仓库都需要有单独仓库托管,本文以创建aligenieSDK仓库作为示例。
image.pngimage.png

2.4 上传代码

一般情况下获取到的代码都已经有本地仓库,只需要添加 remote 即可直接推送。

  1. $ git remote add codeup git@codeup.aliyun.com:XXXXXXX/XXXX/XXXX.git #仓库地址
  2. $ git push codeup master

3. 创建manifest

请务必支持 repo 命令抓取整个工程代码。要支持 repo 命令,需要额外创建个名为 manifest 的代码仓库,并撰写 manifest.xml 上传。
下文以TG6000A平台的manifest.xml 的示例进行演示。TG6210A平台根据对应manifest.xml对应修改即可。

  1. <manifest>
  2. <remote name="codeup" fetch="ssh://git@codeup.aliyun.com/xxx" review="https://codeup.aliyun.com"/>
  3. <default remote="codeup" revision="master" sync-j="4" sync-c="true" sync-tags="false"/>
  4. <!-- BSP -->
  5. <project path="toolchain" name="bsp/toolchain" />
  6. <project path="kernel" name="bsp/kernel" />
  7. <project path="vendor" name="bsp/vendor" />
  8. <project path="build" name="bsp/build" />
  9. <project path="component" name="bsp/component" />
  10. <!-- GENIE -->
  11. <project path="aligenieSDK_alg" name="genie/aligenieSDK_alg" />
  12. <project path="project" name="genie/project" />
  13. <project path="aligenieSDK" name="genie/aligenieSDK" >
  14. <copyfile dest="build.sh" src="scripts/build_TG6000A.sh"/>
  15. </project>
  16. <!-- ISV -->
  17. <project path="thirdparty_app" name="vendor/thirdparty_app" />
  18. </manifest>

假设在 codeup 上仓库地址为:

  1. https://codeup.aliyun.com/1234567890abcdefg/bsp/package.git
  2. # https://codeup.aliyun.com/1234567890abcdefg:仓库远程路径
  3. # bsp:仓库分组组名
  4. # package:仓库名

则对应 remote 的 fetch 字段为:

  1. <remote ... fetch="ssh://git@codeup.aliyun.com/1234567890abcdefg" ...>

而 project 项的 name 字段为:

  1. <project ... name="bsp/package" ...>

编辑好 manifest.xml 并上传至 manifest 仓库之后,即可用以下命令下载完整代码:

  1. repo init -u <manifest仓库url> -m <manifest文件名.mxl> -b master
  2. repo sync
  3. repo start --all <分支名>

xml文件撰写完成,请先在本地下载代码并编译验证通过,然后将xml文件发给阿里进行审核提交。不同产品使用不同的xml文件,为了更好的区分,xml文件命名请按如下规则

  1. <芯片平台>_release_<ISV英文名或拼音>_<产品品牌名英文名或拼音>_<品类拼音>_<产品型号>.xml

比如ALBB这家方案商使用tg6000a芯片平台为品牌商TT研发了一款马桶,其型号为c1c,那么对应xml文件名可以是这样:tg6000a_release_ALBB_TT_matong_c1c.xml

4. 创建钉钉群通知助手

平台构建的过程、结果以及中间产物都通过 钉钉群机器人 通知和发布。下图是构建成功时的发布消息示例。
image.png
image.png

具体的创建步骤如下。

  1. 选择一个钉钉群,进入 群设置 -> 智能群助手 -> 添加机器人 页面。
  2. 选择 自定义(通过Webhook接入自定义服务)

image.png

  1. 安全设置只选择 自定义关键词,并把关键词设置为 **starry** 。其余参数保持默认值即可,如下图所示。

image.png

  1. 最后的页面出现 Webhook 字段的地址链接。链接的最后一个字段就是钉钉助手Token,长度为 64 字节。

image.png

5. 创建加密的 ssh 私钥

创建加密的 ssh 私钥有3个步骤:

  1. 自行准备 ssh 私钥
  2. 加密私钥
  3. 上传至星空平台

请自行准备 ssh 私钥,确保此私钥可用于下载 《猫芯方案:创建代码工程》指南创建的代码工程。为了避免因为意外泄漏密钥造成损失,我们在提交前需要再次加密。原文请自行保存管理,只需要把再次加密后的 Key 上传

加密工具在以下路径:

  1. <Project-TOP>/aligenieSDK/scripts/encrypt

执行方法如下:

  1. ./encrypt <待加密的文件路径> <输出的加密文件路径>

例如:

  1. ./encrypt ~/.ssh/id_rsa ./sshkey.enc

加密后的key不需要压缩,直接上传至星空平台即可。详细参考下文 6.5 其他构建配置

6. 创建加密的OTA签名公私钥

为了保证 OTA 的合法性,在每次 OTA 时都会校验升级包。本文指导客户创建自己的签名公钥和密钥。

  • 避免被恶意攻击,每个客户都需要有自己的独立的公钥和密钥
  • 在星空平台上触发构建会检查公钥和密钥是否存在,如果没有会强制异常退出
  • 密钥一旦已经量产使用,不可再修改,否则已量产版本无法 OTA

6.1 创建签名公私钥

创建 Key 命令:

  1. openssl genrsa -out private.pem 2048 openssl rsa -in private.pem -outform PEM -pubout -out public.pem

执行后当前目录分别有公钥和私钥:

  • 私钥:private.pem
  • 公钥:public.pem

    6.2 加密签名公私钥

    为了避免因为意外泄漏密钥造成损失,我们在提交前需要再次加密。原文请自行保存管理,谨防丢失。只需要把再次加密后的 Key 上传
    加密工具在以下路径:/aligenieSDK/scripts/encrypt
    执行方法如下:./encrypt <待加密的文件路径> <输出的加密文件路径>,例如:

    1. ./encrypt ./private.pem ./private.pem.enc
    2. ./encrypt ./public.pem ./public.pem.enc

    7. 触发平台构建

    7.1 构建入口

    正式量产的固件必须从 天猫精灵AI平台 构建。以下是常规进入产品构建页面的方法。
    image.png
    image.png
    在产品构建界面可以触发构建,也可以查看到之前的构建记录,以及跳转到 OTA 升级页面的链接。

    7.2 定制音量

    image.png

    7.3 定制提示音

    提示音ID 对应产品上的提示音编号,详情 对应提示音的文本内容。定制的提示音会对应 ID 覆盖原始的提示音。 :::tips 设备端的提示音文件路径: /data/prompt/.mp3 ,其中 `` 号表示提示音 ID
    设备端可通过命令: ag_play /data/prompt/xx.mp3 的形式播放验证 ::: image.png

    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 其他构建参数可能随着产品迭代有增删、修改,如果发现文档与实际不匹配,可以找阿里要新文档。 ::: image.png
** 参数描述
下载代码使用的 Manifest 创建代码工程时创建的 manifest.xml,提供给阿里后可获得此文件名
使用的唤醒包名 使用的唤醒包,默认留空或者填写tmjl,参考下文 定制唤醒词
使用的离线指令包名 使用的离线指令包,默认留空或者填写”all”,参考下文 定制离线命令词
下载代码的ssh私钥
- 上文 创建加密的ssh私钥
- 此文件不需要压缩,但必须加密
OTA鉴权公钥
- 上文 创建加密OTA签名公私钥
- 此文件不需要压缩,但必须加密
OTA鉴权私钥

7.6 开始构建

image.png
上图点击 确认 后即可触发构建。一般情况下,平台会保存记录上一次的配置状态和信息。由于构建一次时间比较长,避免浪费时间,在触发构建前最好确认一遍构建配置。触发构建后,常见会有以下几种构建状态。
image.png

7.7 定制唤醒词

定制唤醒词需要联系阿里商务洽谈导入。

7.8 定制离线命令词

定制离线词,目前仅支持TG6000A平台,目前仅支持集成灶、马桶、按摩椅3个品类,这3个品类的产品如果需要使用离线词功能,在构建配置中使用的本地指令包名填入品类的汉语拼音即可:jichengzao、matong、anmoyi。 :::tips 默认选项为全行业版本,仅供开发调试使用,不可用于量产。
其它品类的离线词需求,需要联系阿里商务洽谈导入。 :::