AppManager - Shaofa/AliOS-Things-Certification-Manual GitHub Wiki
- 应用执行
- 从本地FLASH加载并执行JS应用程序
- 执行JS语法块,用于REPL-CLI
- 应用版本管理
- 版本信息存储及上报
- 应用升级
- 从网络下载JS程序包
APP_PACK
- 校验、解密、保存 JS 程序
- 从网络下载JS程序包
JS应用升级的风险: 有一个特殊标示, 标记当前app升级未正常结束的情况,该情况下启动再次更新应用程序,前提是网络正常。
从ESP32模组的分区表看,应用程序是有主备两个同等大小的分区,每次升级都是写备份分区,升级成功之后从备份分区启动并会变成主分区。 详细设计参考AOS FOTA升级介绍
[HAL_PARTITION_APPLICATION] =
{
.partition_owner = HAL_FLASH_EMBEDDED,
.partition_description = "Application",
.partition_start_addr = 0x10000,
.partition_length = 0x100000, //1MB bytes
.partition_options = PAR_OPT_READ_EN | PAR_OPT_WRITE_EN,
},
[HAL_PARTITION_OTA_TEMP] =
{
.partition_owner = HAL_FLASH_EMBEDDED,
.partition_description = "OTA Storage",
.partition_start_addr = 0x110000,
.partition_length = 0x100000, //1MB bytes
.partition_options = PAR_OPT_READ_EN | PAR_OPT_WRITE_EN,
},
疑问:
- (ProductKey/DeviceName/DeviceSecret)出厂已经烧录到设备参数分区中,这三要素升级FOTA固件时也需要,升级JS APP时也需要,通过系统API获取
- FOTA升级固件 与 JS APP, 是一个通道,只是topic不同,需要与AOS团队一起商定
- FOTA当前只能升级一个分区,在当前场景应用中需要升级多个分区,如参数分区、JS应用分区, 需要与AOS团队一起商定
- 当前有PARAMETER 1~4 ,4个分区的用途是什么?
- 增加一个“JS_APP”的分区,用于保存JS应用程序,剩余空间都分给该分区,建议不小于128KB
APP_PACK文件是对JS应用程序包
JS程序加密算法: AES-ECB-128
内容完整性校验算法 : MD5
.
├── drivers
│ ├── door.js
│ ├── fan.js
│ ├── light.js
│ └── temp.js
├── index.js
├── device.js
├── README.md
└── version.js
应用程序说明:
- index.js JS应用程序执行入口
- device.js 设备上云相关操作类
- version.js JS应用程序版本信息模块文件
- drivers JS应用需要使用到的设备对象模块,与具体硬件相关,操作buildin的hw对象
文件头结构:
typedef struct {
uint16 file_count;
uint16 pack_version;
uint32 pack_size;
} JSEPACK_HEADER;
typedef struct {
uint8 name[32];
uint32 file_type:8;
uint32 file_size:24;
uint8 md5[16];
// uint8 data[];
}JSEPACK_FILE;
typedef struct {
JSEPACK_HEADER file_header;
//JSEPACK_FILE file_bodys[];
}JSEPACK;
文件名称长度约定: 少于32Byte
说明:
-
file_header
JSEPACK_HEADER
类型,描述pack中文件的个数,及应用软件包版本,该文件的总长度等。 -
file_bodys[]
pack中包含的文件,每个文件都是
JSEPACK_FILE
类型,头信息有文件名称,类型,大小,从第52Byte开始是文件内容,文件内容采用AES-ECB-128
算法加密,密钥采用云端下发 对文件的内容采用MD5
算法计算哈希值并保存在pack文件头信息file_header
中
git库地址:
[email protected]:Gravity/jsepack.git
使用方法:
node app_pack ./app
把当前./app
目录对应的JS应用程序打包成./app_pack.bin
文件
从指定URL下载app pack并升级,升级成功返回0
- 制作app pack
node app_pack ./app
- 搭建web server
npm install -g http-server
http-server ./
- 升级验证
在串口CLI中
appupdate http://192.168.8.101:8080/app_pack.bin
�