110 lines
6.2 KiB
Markdown
110 lines
6.2 KiB
Markdown
|
# 独立升级使用指导
|
|||
|
## 如何开启独立升级
|
|||
|
|
|||
|
修改
|
|||
|
>build/config/target_config/ws63/config.py
|
|||
|
|
|||
|
中的配置项
|
|||
|
>ws63-liteos-app-iot
|
|||
|
|
|||
|
具体修改如下:
|
|||
|
1. 删除`'liteos_kconfig': 'ws63_iot'`
|
|||
|
2. 在`'defines'`中增加`CONFIG_SUPPORT_HILINK_INDIE_UPGRADE`
|
|||
|
3. 在`'ram_component'`中增加`'app_addr_map'`并删除`'hilinkdevicesdk'`、`'hilinkota'`、`'hilinkbtsdk'`、`'hilinkquickcfg'`
|
|||
|
|
|||
|
若需关闭独立升级,反向操作即可。独立升级默认已开启。
|
|||
|
|
|||
|
## 开启独立升级时的编译方式
|
|||
|
|
|||
|
1. 开启独立升级后,代码将编译为两个固件,hilink sdk单独一个固件,因此需要分别进行编译,即:
|
|||
|
先编译hilink固件
|
|||
|
`./build.py -c ws63-liteos-hilink`
|
|||
|
再编译app-iot固件,并生成完整烧录包
|
|||
|
`./build.py -c ws63-liteos-app-iot`
|
|||
|
产物位于
|
|||
|
>output/ws63/fwpkg/ws63-liteos-app-iot/ws63-liteos-app-iot_all.fwpkg
|
|||
|
|
|||
|
打包生成完整升级包
|
|||
|
`./build/config/target_config/ws63/build_ws63_update.py --pkt=app_iot`
|
|||
|
产物位于
|
|||
|
>output/ws63/upgrade/update.fwpkg
|
|||
|
2. **(建议)**使用新增编译工具进行一步编译,该工具可一步生成所需产物,如下:
|
|||
|
模组工程有更新,需要全量编译时:
|
|||
|
`./indie_build.py all`
|
|||
|
该命令会依次编译hilink固件、app-iot固件,生成完整烧录包与完整升级包,并将相关输出打包,产物位于
|
|||
|
>output/ws63/ws63-liteos_all.zip
|
|||
|
|
|||
|
压缩包中除了完整烧录包和完整升级包外,也归档了两个固件以及他们的校验文件,其中
|
|||
|
>ws63-liteos-app-iot-sign.bin
|
|||
|
ws63-liteos-app-iot-check.json
|
|||
|
|
|||
|
需要进行归档,用于独立升级时的合包和校验过程。
|
|||
|
|
|||
|
## 独立升级流程
|
|||
|
|
|||
|
当app-iot固件无需更新,仅hilink固件需要更新,且其互相调用的接口未发生变化时,可进行独立升级流程。步骤如下:
|
|||
|
|
|||
|
1. 获取已经过认证并归档的app-iot固件,及其校验文件,即
|
|||
|
>ws63-liteos-app-iot-sign.bin
|
|||
|
ws63-liteos-app-iot-check.json
|
|||
|
|
|||
|
将其置于工程目录中
|
|||
|
>output/ws63/acore/ws63-liteos-app-iot/
|
|||
|
|
|||
|
2. 获取更新的hilink sdk库文件,替换工程中原有的库文件:
|
|||
|
>application/samples/wifi/libhilink/
|
|||
|
|
|||
|
独立编译sdk,并生成完整烧录包和完整升级包:
|
|||
|
`./indie_build.py sdk`
|
|||
|
该命令会编译生成新的hilink固件,并与已经过认证的app-iot固件进行匹配校验。若有接口不匹配,将校验失败,表示不允许进行独立升级,可在日志检查具体接口。在通过校验后,与app-iot固件打包生成完整的烧录包以及升级包。产物位于
|
|||
|
>output/ws63/upgrade/package.zip
|
|||
|
|
|||
|
即完整升级包,上传平台进行独立升级流程。
|
|||
|
|
|||
|
## 独立升级约束
|
|||
|
1. 由于分区划分存在差异,非独立升级版本与独立升级版本不可以交叉升级。
|
|||
|
2. 由于独立升级时,模组app程序不变,仅HiLink程序改变,若有接口发生变更(如参数类型、顺序等)发生变化,则可能引起程序不可预期的现象。因此会在制作独立升级OTA包时,对模组app和HiLink双方固件的接口进行校验,若未通过,不允许进行独立升级。
|
|||
|
3. 开启独立升级时,产品固件版本号格式会拼接sdk版本号,例:
|
|||
|
非独立升级:1.0.0
|
|||
|
独立升级:1.0.0_14.2.0.304
|
|||
|
部署OTA升级时,需按对应格式填写版本号
|
|||
|
|
|||
|
## 新增接口适配
|
|||
|
开启独立升级后,由于模组app和HiLink分别编译成两个固件,其接口未经过链接,不能直接相互调用。其调用机制为,双方各自维护一张接口地址表,当一方需要调用另一方接口时,查询对方接口地址表并返回接口函数指针,再进行调用。
|
|||
|
因此双方接口需要额外适配,才能实现互相调用。对HiLink新增接口举例如下(HiLink需新增调用模组app侧接口可类似参考):
|
|||
|
1. HiLink新增接口,原型为:
|
|||
|
`retType TestFuncName(type1 param1, type2 param2, type3 param3);`
|
|||
|
接口函数声明位于
|
|||
|
>application/samples/wifi/ohos_connect/hilink_adapt/include/hilink_test.h
|
|||
|
2. 在
|
|||
|
>application/samples/wifi/hilink_indie_upgrade/address_mapping/application/hilink_uapi/
|
|||
|
|
|||
|
中新增文件`uapi_hilink_test.c`,添加该接口的查表适配实现,如下:
|
|||
|
```c
|
|||
|
retType TestFuncName(type1 param1, type2 param2, type3 param3)
|
|||
|
{
|
|||
|
hilink_call3(HILINK_CALL_TEST_FUNC_NAME, TestFuncName, retType, type1, param1, type2, param2, type3, param3);
|
|||
|
return (retType)0;
|
|||
|
}
|
|||
|
```
|
|||
|
其中,宏hilink_call3表示查找并调用具有3个参数的hilink接口,需根据函数的返回值和参数数量选择对应的宏`hilink_callx`或`hilink_callx_ret_void`。若查找到对应接口,会直接调用返回,若未查找到则往下走,第二行`return (retType)0;`为查找失败时的返回逻辑。
|
|||
|
该宏接收的第一个参数为该接口的枚举值,用于表示接口在地址表中的位置,于
|
|||
|
>application/samples/wifi/hilink_indie_upgrade/address_mapping/include/func_call_list.h
|
|||
|
|
|||
|
中定义,该文件会在编译时通过脚本根据接口函数名生成,无需手动增加。在编写查表实现时,可预先参考其他枚举值填写。
|
|||
|
该宏的后续参数分别为函数名、返回值类型、参数类型、参数名。
|
|||
|
3. 在对应的
|
|||
|
>application/samples/wifi/hilink_indie_upgrade/address_mapping/application/CMakeLists.txt
|
|||
|
|
|||
|
中增加该文件`uapi_hilink_test.c`的编译。
|
|||
|
4. 在
|
|||
|
>build/script/utils/indie_upgrade_utils.py
|
|||
|
|
|||
|
中增加该文件的配置,即:
|
|||
|
- 在文件中的变量`default_config["hilink"]["src_file"]`中增加`"uapi_hilink_test.c"`
|
|||
|
- 在`default_config["hilink"]["mapping_header"]`中增加对应头文件的路径`"application/samples/wifi/ohos_connect/hilink_adapt/include/"`和文件名`"hilink_test.h"`
|
|||
|
|
|||
|
工程编译时,脚本会正则匹配所添加的源文件和头文件中的接口函数原型,并检查其是否匹配,若想跳过该检查,可在`default_config["hilink"]["white_list"]`中添加对应的接口函数名,如`"TestFuncName"`。检查完成后,会自动生成接口地址表:
|
|||
|
>application/samples/wifi/hilink_indie_upgrade/address_mapping/hilinksdk/hilink_function_mapping.c
|
|||
|
|