Silicon labs Gecko bootloader 升级用的GBL文件格式【四】
本系列的文章用来说明Gecko bootloader(下称bootloader)的功能,原理,内存分配等,而本文则是用来介绍升级过程中用到的GBL文件格式,包括加密和不加密的GBL文件。
作为一个系列的文章,如果有不清楚的,可以先阅读
1. Gecko bootloader的介绍(Silicon Labs) 【一】
2. Silicon Labs Gecko bootloader的主要特性 【二】
3. Silicon Labs Gecko bootloader的存储分配 【三】
EFR32是目前最主流的ZigBee平台之一,由silicon labs原厂推出的bootloader功能很完整,通过simplicity commander软件将升级镜像打包为GBL文件,便可以利用网关等设备对终端进行升级。GBL文件即要被应用层的传输协议识别,同时也需要让bootloader识别。
标签
由于GBL文件由多个字段组成,为了能够将各字段的数据进行标识清楚,采用了标签,标签当中可以指明后续数据内容的长度和格式。标签的格式如下:
标签号 / Tag ID |
标签长度 / Tag Length |
标签数据 / Tag Payload |
4 bytes |
4 bytes |
可变长度 (由标签长度决定) |
标签又分为明文标签和加密标签
明文标签列表如下
标签名称 / Tag Name |
编号 / ID |
描述 / Desc |
GBL Header |
0x03A617EB |
GBL文件的第一个标签,包含GBL文件的版本,并标明该文件是否签名和加密 |
GBL Application info |
0xF40A0AF4 |
包含应用程序升级固件的(描述)信息 |
GBL SE Upgrade |
0x5EA617EB |
包含一个完整的加密的Secure Element,仅在Series 2上有用 |
GBL bootloader |
0xF50909F5 |
包含了一个完整的bootloader |
GBL Program Data |
0xFE0101FE or 0xFD0303FD |
位于特定地址应用程序的程序数据信息 |
GBL Program LZ4 Compressed Date |
0xFD0505FD |
包含LZ4压缩信息,解压后得到位于特定地址应用程序的程序数据信息 |
GBL Program LZMA Compressed Data |
0xFD0707FD |
包含LZMA压缩信息,解压后得到位于特定地址应用程序的程序数据信息 |
GBL Metadata |
0Xf60808f6 |
这部分数据bootloader并不解析,应用程序可以通过特定回调函数读出,(可用来扩展功能,传递数据) |
GBL Signature |
0xf70a0af7 |
ECDSA-P256签名,签过文件得到结果时,存在这个标签当中 |
GBL End |
0xfc0404fc |
这个标签总是GBL文件的最后一个标签,包括一个32位的CRC校验码,用来检查文件的完整性。 |
使用明文GBL文件,可以使用下面的系列来构成文件。
加密标签列表如下
标签名称 / Tag Name |
编号 / ID |
描述 / Desc |
GBL Header |
0x03A617EB |
这个标签与明方标签一样,也必须是GBL文件的第一个标签,不同的是,标签要指明GBL文件是加密的 |
GBL Encryption Init Header |
0xFA0606FA |
包含有关镜像加官的信息,如Nonce和加密数据的数量。 |
GBL Encrypted Program Data |
0Xf90707f9 |
加密的数据负载,其中的数据是明文GBL标签,可能是Application info, Bootloader, Metadata 或者Program等其中之一。这一标签使用AES-CTR-128加密 |
使用加密的GBL文件,可以使用下面的系列来构成文件。
关于Bootloader, 先说这么多,以后有内容再补充