Skip to content

lbbit/rt_ota_package_cmd

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RT-Thread OTA 固件打包工具

简介

本工具是基于 RT-Thread OTA 固件打包工具的命令行版本,使用 Python 编写。它支持将固件文件打包成 RBL (RT-Thread Boot Loader) 格式,可用于 RT-Thread 系统的 OTA 升级。

主要特点:

  • 支持多种压缩和加密方式
    • 不压缩|不加密
    • 不压缩|AES256加密
    • GZIP压缩|不加密
    • GZIP压缩|AES256加密
  • 支持配置文件和命令行参数混合使用
  • 支持自动化打包,便于批量处理
  • 提供打包好的可执行文件,方便在 Windows 环境使用

使用方法

Python 脚本使用

  1. 环境要求:

    • Python 3.9 或更高版本
    • 安装依赖:pip install pycryptodome
  2. 配置文件方式:

    python Package.py -c config.json
  3. 命令行参数方式:

    # 使用配置文件并覆盖固件版本
    python Package.py -c config.json --FirmwareVersion 2.2.3
    
    # 同时指定多个参数
    python Package.py -c config.json --FirmwareVersion 2.2.3 --FirmwarePartitionName app2

可执行文件使用

打包好的 rt_ota_pack_cmd.exe 使用方法与 Python 脚本相同:

# 仅使用配置文件
rt_ota_pack_cmd.exe -c config.json

# 使用配置文件并覆盖参数
rt_ota_pack_cmd.exe -c config.json --FirmwareVersion 2.2.3

支持的参数

所有参数都支持通过配置文件和命令行指定,命令行参数优先级高于配置文件:

  • -c, --config:指定配置文件路径,默认为 ./config.json
  • --FirmwarePath:固件文件路径
  • --RBLPath:输出RBL文件路径
  • --CompressionEncryptionAlgorithm:压缩和加密算法
    • RT_OTA_CRYPT_ALGO_NONE:不压缩不加密
    • RT_OTA_CRYPT_ALGO_AES256:AES256加密
    • RT_OTA_CMPRS_ALGO_GZIP:GZIP压缩
    • RT_OTA_CMPRS_ALGO_GZIP_AES256:GZIP压缩+AES256加密
  • --EncryptionKey:AES256加密密钥(32字节)
  • --EncryptionIV:AES256加密初始向量(16字节)
  • --FirmwarePartitionName:固件分区名称
  • --FirmwareVersion:固件版本

配置文件示例

{
  "FirmwarePath": "./test.bin",
  "RBLPath": "./test_cmd.rbl",
  "CompressionEncryptionAlgorithm": "RT_OTA_CMPRS_ALGO_GZIP_AES256",
  "EncryptionKey": "0123456789ABCDEF0123456789ABCDEF",
  "EncryptionIV": "0123456789ABCDEF",
  "FirmwarePartitionName": "app",
  "FirmwareVersion": "1.0.1"
}

打包方法

本项目提供了 Windows 环境下的自动打包脚本 build.bat,它会:

  1. 创建 Python 虚拟环境(如果不存在)
  2. 安装所需依赖(requirements.txt)
  3. 使用 PyInstaller 打包成单文件可执行程序

使用方法:

# 直接运行 build.bat 即可
build.bat

打包完成后,可执行文件 rt_ota_pack_cmd.exe 将生成在 dist 目录下。

RBL 文件格式说明

RBL 文件由 96 字节的文件头和后续的固件数据组成。文件头结构如下:

typedef struct {
    char type[4];               // RBL 字符头
    rt_uint16_t fota_algo;     // 算法配置:加密/压缩算法标识
    rt_uint8_t fm_time[6];     // 原始 bin 文件时间戳
    char app_part_name[16];    // app 执行分区名
    char download_version[24];  // 固件代码版本号
    char current_version[24];   // 当前运行的固件版本号
    rt_uint32_t code_crc;      // 打包后代码的 CRC32 校验值
    rt_uint32_t hash_val;      // 原始代码的 FNV1a 哈希值
    rt_uint32_t raw_size;      // 原始代码大小
    rt_uint32_t com_size;      // 打包后代码大小
    rt_uint32_t head_crc;      // 文件头的 CRC32 校验值
} rt_fota_part_head;

GZIP 压缩说明

本工具使用 Python 的 gzip 模块进行压缩,压缩等级设置为 6,与官方工具效果相同。为了保持与官方工具的兼容性,工具会自动修正 GZIP 文件头中的以下字段:

  • MTIME:设置为 0
  • XFL:设置为 4(表示最快压缩算法)
  • OS:设置为 0(表示 FAT 文件系统)

相关项目推荐

注意事项

  1. 在使用 AES256 加密时,请确保:

    • 加密密钥(EncryptionKey)长度为 32 字节
    • 初始向量(EncryptionIV)长度为 16 字节
  2. 建议优先使用"不压缩|AES256加密"配置,因为某些 bootloader 的解压功能可能存在兼容性问题。

  3. 命令行参数会覆盖配置文件中的相同参数,可以灵活组合使用。

  4. 使用 GZIP 压缩时,本工具已经处理了与官方工具的兼容性问题,可以放心使用。

  5. 推荐搭配 RT-Thread Qboot 使用,该版本已在多个平台上验证通过。

About

兼容原版RT-OTA打包工具,python 编写,可用于命令行打包

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Python 95.7%
  • Batchfile 4.3%