尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Matter 设备固件 OTA 升级实战:Bouffalo Lab 平台的 OTA 镜像构建与端到端升级测试

Matter 设备固件 OTA 升级实战:Bouffalo Lab 平台的 OTA 镜像构建与端到端升级测试 Matter 设备固件 OTA 升级实战Bouffalo Lab 平台的 OTA 镜像构建与端到端升级测试【免费下载链接】connectedhomeipMatter (formerly Project CHIP) creates more connections between more objects, simplifying development for manufacturers and increasing compatibility for consumers, guided by the Connectivity Standards Alliance.项目地址: https://gitcode.com/GitHub_Trending/co/connectedhomeip导读本文基于 Matter 开源仓库connectedhomeip中 Bouffalo Lab 平台的 OTA 升级指南系统讲解 BL602/BL702/BL702L 与 BL616 等博流Bouffalo LabSoC 的 Matter 设备 OTA 镜像构建方法、镜像格式差异以及如何借助chip-tool与ota-provider-app完成一次完整的 OTA 软件升级验证。读完本文你将掌握从编译产物生成可分发.matterOTA 镜像、配置升级 Provider、对设备发起升级并校验版本号的完整实战流程同时理解 OTA 镜像头的底层生成与校验逻辑。一、OTA 镜像构建从编译产物到 Matter 可分发镜像1.1 构建示例目标本文以 Matter 构建目标bouffalolab-bl602dk-light-wifi-littlefsBL602DK 开发板、Wi-Fi 连接、littlefs 文件系统为例介绍 OTA 镜像的构建流程。该目标对应的典型示例应用为 lighting照明示例。在激活 Bouffalo Lab 构建环境后可使用build_examples.py查看支持的平台目标source scripts/activate.sh -p bouffalolab ./scripts/build/build_examples.py targets输出中以bouffalolab开头的目标遵循如下组合命名可参见 Bouffalo Lab 入门指南bouffalolab-{bl602-night-light,bl602dk,bl616cl,bl616dk,bl704ldk,bl706-night-light,bl706dk}-{contact-sensor,light}-{ethernet,thread,thread-ftd,thread-mtd,wifi}-{easyflash,littlefs}[-cdc][-coredump][-memmonitor][-mfd][-rotating_device_id][-rpc][-shell]其中板级选项-bl602dk、-bl616dk、-bl616cl、-bl704ldk、-bl706dk等应用选项-light、-contact-sensor连接方式-wifi、-ethernet、-thread/-thread-ftd/-thread-mtd存储选项-littlefs、-easyflash两者格式不兼容已在市场部署的设备请保持原有存储选项。BL602 使用BL_IOT_SDK的 ninja 构建系统而 BL61X如 BL616使用bouffalo_sdk的 CMake 构建系统build_examples.py对两类目标保持兼容并统一导出产物到out/target目录。1.2 flash.py 脚本下载与 OTA 构建的统一入口示例编译完成后会在./out/bouffalolab-bl602dk-light-wifi-littlefs/下生成一个 Python 脚本chip-bl602-lighting-example.flash.py该脚本有两个职责下载镜像到 Bouffalo Lab SoC通过 UART 将固件烧录到设备构建 OTA 镜像当传入--build-ota参数时生成 Matter 标准的 OTA 分发镜像。该脚本由构建系统自动生成。在scripts/build/builders/bouffalolab.py的_post_build()流程中构建器会调用scripts/flashing/gen_flashing_script.py以--chipname、--baudrate 2000000、--application app.bin等参数生成该 wrapper 脚本因此脚本内的默认参数与本次构建目标严格对应。1.3 生成 OTA 镜像的命令执行以下命令即可基于当前编译产物生成 OTA 镜像./out/bouffalolab-bl602dk-light-wifi-littlefs/chip-bl602-lighting-example.flash.py --build-ota --vendor-id vendor id --product-id product id --version version number --version-str version number string --digest-algorithm digest algorithm关于vendor id、product id、version number、version number string与digest algorithm的详细说明可查阅仓库中的 src/app/ota_image_tool.py下文 1.5 节会展开讲解其底层逻辑。一个可直接参考的示例命令./out/bouffalolab-bl602dk-light-wifi-littlefs/chip-bl602-lighting-example.flash.py --build-ota --vendor-id 0xFFF1 --product-id 0x8005 --version 10 --version-str 1.0 --digest-algorithm sha256重要前提在构建测试 OTA 镜像前请先修改示例工程目录下CHIPProjectConfig.h中的CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION与CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING两个宏分别对应固件中声明的软件版本号与版本字符串必须与 OTA 镜像头中的--version/--version-str保持一致或符合你的升级策略否则 OTA 校验阶段可能因版本号不匹配而失败。仓库中可参考的实际配置位于 examples/contact-sensor-app/bouffalolab/bflb/CHIPProjectConfig.h。1.4 命令参数的源码级说明flash.py脚本继承自 scripts/flashing/bouffalolab_firmware_utils.py 中的Flasher类其全部命令行选项定义在BOUFFALO_OPTIONS配置表中。与 OTA 构建直接相关的参数如下参数说明默认值--build-ota开关构建 OTA 镜像store_true构建完成后不进行固件下载无--vendor-id传递给ota_image_tool.py的厂商 ID任意进制整数如0xFFF1无--product-id传递给ota_image_tool.py的产品 ID任意进制整数如0x8005无--version软件版本号数值型写入 OTA 镜像头无--version-str软件版本字符串如1.0写入 OTA 镜像头无--digest-algorithm摘要算法如sha256用于对 payload 计算哈希无--min-version最小适用版本号可选无--max-version最大适用版本号可选无--release-notes发布说明 URL可选无--sk用于给固件/OTA 镜像签名的私钥路径可选无其余与烧录相关的参数还包括--chipname、--pt分区表、--dts设备树、--xtal、--port、--baudrate、--boot2、--mfd/--mfd-strMatter 工厂数据等。值得注意的是从actions()方法的实现可以看出--build-ota与--port不能同时使用源码中显式抛出Do not generate OTA image with firmware programming.即 OTA 构建与固件烧录是两个互斥的操作BL602/BL702/BL702L 走iot_sdk_prog()流程BL616/BL616CL 走bouffalo_sdk_prog()流程bouffalo_sdk_chips [bl616, bl616cl]两种流程生成的厂商级 OTA 中间产物格式不同但最终都会调用gen_ota_image()统一封装为 Matter OTA 镜像最终封装时脚本会从ota_images目录中收集.ota或.hash文件逐一调用ota_image_tool的validate_header_attributes()与generate_image()输出为原文件名.matter见gen_ota_image()实现。1.5 OTA 镜像头的底层结构Matter OTA 镜像头由 src/app/ota_image_tool.py 生成其关键常量与字段如下魔数Magic0x1BEEF11E用于识别合法 OTA 镜像TLV 头字段HeaderTag枚举依次为VENDOR_ID(0)、PRODUCT_ID(1)、VERSION(2)、VERSION_STRING(3)、PAYLOAD_SIZE(4)、MIN_VERSION(5)、MAX_VERSION(6)、RELEASE_NOTES_URL(7)、DIGEST_TYPE(8)、DIGEST(9)摘要算法 ID 映射DIGEST_ALGORITHM_IDsha256→1、sha256_128→2、sha256_120→3、sha256_96→4、sha256_64→5、sha256_32→6、sha384→7、sha512→8、sha3_224→9、sha3_256→10、sha3_384→11、sha3_512→12。命令行中可用的算法会与 Python 运行环境实际支持的哈希算法求交集payload 摘要计算以 16KBPAYLOAD_BUFFER_SIZE为缓冲分块读取输入固件累加总大小并更新摘要避免大文件一次性载入内存。validate_header_attributes()会对镜像头属性做一致性校验这是生成命令参数合法性的第一道防线vendor_id与product_id不能为 0version_str长度必须在 164 个字符之间min_version必须小于version不能大于等于max_version必须小于version不能大于等于且min_version不能大于max_versionrelease_notes若提供长度须为 1256且建议以https://开头否则仅告警。此外该工具还支持show查看镜像信息、extract剥离头、change_header修改头字段等子命令可用于生产环境的镜像检查与修补。二、不同 SoC 平台的 OTA 镜像产物OTA 镜像生成后统一存放在out/bouffalolab-bl602dk-light-wifi-littlefs/ota_images目录下。不同 SoC 的产物格式存在差异BL602以及格式相同的 BL702、BL702L以 lighting 示例为例chip-bl602dk-lighting-example.bin.hash.matter以原始固件镜像打包的 OTA 镜像chip-bl602dk-lighting-example.bin.xz.hash.matter以 xz 压缩固件镜像打包的 OTA 镜像体积更小升级传输更快建议优先用于实际部署。BL616 SoC 平台则使用不同的 OTA 镜像格式以支持 Wi-Fi 与 littlefs 的 BL616 lighting 应用为例chip-bl616-lighting-example.bin.ota.matter以原始固件镜像打包的 OTA 镜像chip-bl616-lighting-example.xz.ota.matter以压缩固件镜像打包的 OTA 镜像。安全提示关于固件与 OTA 镜像的更深入安全要求如签名、加密、防回滚等请联系 Bouffalo Lab 获取官方支持。本文仅覆盖标准 Matter OTA 镜像的构建与测试流程。三、端到端升级测试chip-tool ota-provider-app构建好 OTA 镜像后可以通过 Linux 主机上的chip-toolMatter 控制器与ota-provider-appOTA Provider 端验证真实升级链路。相关工具的使用指南见chip-tool 开发控制器指南构建与用法chip-tool 示例 READMEota-provider-app Linux 示例 README。测试的整体拓扑为Linux 主机运行chip-tool与ota-provider-appBouffalo Lab 设备作为 OTA Requestorota-provider-app提供镜像文件chip-tool负责配网commissioning、ACL 授权与发起 OTA 通告。3.1 启动 ota-provider-app以 OTA 压缩镜像为例启动 Provider建议先清理旧的 chip 运行时目录$ rm -r /tmp/chip_* $ out/linux-x64-ota-provider/chip-ota-provider-app -f out/bouffalolab-bl602dk-light-wifi-littlefs/ota_images/chip-bl602-lighting-example.bin.xz.hash.matter参数-f指定提供给设备的 OTA 镜像文件路径。3.2 配网并授权 ota-provider-app首先为 ota-provider-app 分配一个节点 ID 并完成配网$ ./out/linux-x64-chip-tool/chip-tool pairing onnetwork ota_provider_node_id 20202021其中20202021是测试用配对 PIN 码setup code。随后写入 ACL授予 Provider 相应的访问权限$ ./out/linux-x64-chip-tool/chip-tool accesscontrol write acl [{fabricIndex: 1, privilege: 5, authMode: 2, subjects: [112233], targets: null}, {fabricIndex: 1, privilege: 3, authMode: 2, subjects: null, targets: null}] ota_provider_node_id 0这条 ACL 配置包含两条规则第一条授予 subject112233即设备/控制器节点最高权限privilege 5Administer第二条授予 fabric 内所有主体以 Manage 权限privilege 3从而保证 OTA 升级流程所需的访问控制权限。3.3 设备配网按连接方式选择根据 Bouffalo Lab 设备的实际连接方式用chip-tool以对应方式完成 BLE 配网20202021为配对码3840为配对使用的 UDP 端口Wi-Fi./out/linux-x64-chip-tool/chip-tool pairing ble-wifi device_node_id wifi_ssid wifi_passwd 20202021 3840Thread./out/linux-x64-chip-tool/chip-tool pairing ble-thread device_node_id hex:thread_operational_dataset 20202021 3840Ethernet有线网络./out/linux-x64-chip-tool/chip-tool pairing onnetwork device_node_id 202020213.4 发起 OTA 软件升级配网成功后通过 OTA Software Update Requestor 集群的通告命令触发升级流程./out/linux-x64-chip-tool/chip-tool otasoftwareupdaterequestor announce-otaprovider ota_provider_node_id 0 0 0 device_node_id 0该命令的作用是向目标设备device_node_id通告 OTA Provider 的位置设备随后会主动向 Provider 请求镜像并执行下载、校验与安装。3.5 升级完成后验证新固件版本OTA 升级完成后设备会自动重启。设备重新上线后可通过 Basic Information 集群读取固件实际版本确认升级是否生效./out/linux-x64-chip-tool/chip-tool basicinformation read software-version device_node_id 0 ./out/linux-x64-chip-tool/chip-tool basicinformation read software-version-string device_node_id 0software-version返回固件中CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION对应的数值版本software-version-string返回CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING对应的版本字符串。若返回值与 OTA 镜像头中的--version/--version-str一致即表明新固件已成功应用。四、完整升级链路总结与注意事项一次完整的 Bouffalo Lab Matter OTA 升级包含以下步骤配置版本号修改示例工程CHIPProjectConfig.h中的CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION与CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING构建固件通过build_examples.py或 BL61X 的 CMake/Makefile 流程编译出.bin固件及*.flash.py脚本生成 OTA 镜像执行flash.py --build-ota --vendor-id ... --product-id ... --version ... --version-str ... --digest-algorithm sha256产物位于out/target/ota_images/目录部署 Provider在 Linux 主机启动ota-provider-app -f 镜像文件并用chip-tool完成配网与 ACL 授权设备配网按 Wi-Fi / Thread / Ethernet 连接方式完成设备 commissioning触发升级通过otasoftwareupdaterequestor announce-otaprovider通告 Provider设备自动完成下载与安装并重启验证结果读取software-version与software-version-string确认升级成功。关键注意事项OTA 镜像头中的版本号必须与固件内声明的软件版本相匹配且满足min_version/max_version约束如回滚保护场景否则设备端可能拒绝升级--build-ota与--port互斥OTA 构建与烧录不能在同一次命令中完成BL602/BL702/BL702L 与 BL616 的 OTA 镜像格式不同Provider 端提供的镜像文件必须与目标芯片平台匹配设备固件升级涉及安全要求镜像签名、加密、安全启动等时请联系 Bouffalo Lab 获取支持。【免费下载链接】connectedhomeipMatter (formerly Project CHIP) creates more connections between more objects, simplifying development for manufacturers and increasing compatibility for consumers, guided by the Connectivity Standards Alliance.项目地址: https://gitcode.com/GitHub_Trending/co/connectedhomeip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表