# otapack **Repository Path**: japyvi/otapack ## Basic Information - **Project Name**: otapack - **Description**: ota程序打包命令行工具 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-07 - **Last Updated**: 2025-04-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1 简介 本程序是一个基于C语言的命令行工具,用于将hex,bin等程序镜像打包成符合后台远程升级格式的bin文件。 # 2 编译 ```bash gcc main.c -o otapack.exe ``` 或者 ```bash make ``` # 3 使用 ## 3.1 查看帮助信息 ```bash ./otapack.exe -h ``` ## 3.2 将镜像文件打包为OTA升级包 ```bash ./otapack.exe -p [file] [type] [version] ``` 参数说明: - file: 要打包的文件,可以是.hex,.bin, .cly等格式的文件 - type: 打包的固件类型,请查看支持的固件类型 - version: 固件版本号,格式为 a.b,其中a和b的范围都是0~255的数字,a为主版本,b为次版本 ## 3.3 将OTA升级包解包为bin镜像文件 ```bash ./otapack.exe -u [file] ``` ## 3.4 查看OTA升级文件信息 ```bash ./otapack.exe -v [file] ``` # 4 文件格式说明 ## 4.1 程序文件格式 本程序支持的文件格式如下: - .hex: Intel Hex格式的文件 - .bin: 二进制格式的文件 - .cly: 自定义格式程序文件,格式为: - 文件内容为按行存储的ascii编码hex字符串 - 第一行是程序长度,实际是一个按照高字节在前的4字节的int类型数据 - 后续每行为128个字节的hex字符串,每个字节用2个字符表示,也就是说,每行为64字节二进制数据 ## 4.2 OTA升级文件格式 ota文件头信息固定为32字节,word类型和int类型数据按照低位在前,高位在后的字节顺序排列 ota文件头结构如下: | 起始地址 | 字节长度 | 名称 | 描述 | | ------- | ------- | ---- | ---- | | 0 | 1 | 标识码1 | 固定为 0xAA, 用于标识文件头 | | 1 | 1 | 标识码2| 固定为 0x55, 用于标识文件头 | | 2 | 1 | 固件数量| 固定为 1,打包的固件数量 | | 3 | 1 | 固件主版本号| char类型, 指定固件主版本号 | | 4 | 1 | 固件次版本号| char类型, 指定固件次版本号 | | 5 | 11 | 预留 | 预留字段, 填充为0 | | 16 | 4 | 固件长度 | int 类型, 除去本文件头,固件文件的长度 | | 20 | 2 | 固件校验和 | unsigned int 类型,固件累加和校验 | | 22 | 10 | 固件类型 | ascii字符串, 指定固件类型 | 整个.ota文件格式如下: | 起始地址 | 字节长度 | 内容 | | ------ | ------- | ---- | | 0 | 32 | ota文件头 | | 32 | 固件文件长度| 固件镜像 | # 5 支持的固件类型 固件类型是不同的项目的固件内部用来标识固件的类型,是一个不超过10字节的ascii字符串,每个固件程序自由指定一个固件类型,本程序不对固件类型做任何限制。 本程序在打包OTA升级文件时,需要指定固件类型。固件在解包OTA升级文件时,如果固件类型不匹配,会提示错误。 # 6 程序设计说明 - 输入文件格式通过程序的后缀名来判断,程序会自动识别输入文件的格式。 - 除了bin文件,可以直接打包,其它类型的文件,需要先转换成bin文件,然后再打包。 - .hex格式的文件,可以使用hex2bin.exe工具将其转换成bin文件。 - .cly格式的文件,创建一个专门处理cly文件的函数,用于将cly文件转换成bin文件。将cly文件转成bin文件时,cly文件的第1行是文件长度,也需要转换写入bin文件,该行转换后是一个4字节int,高位在前。 - 程序支持的固件类型,通过命令行参数指定,程序不做任何限制。 - 程序支持的固件版本号,通过命令行参数指定,程序不做任何限制。 - 程序支持的命令行参数,通过getopt函数解析。 - 程序支持的命令行参数如下: - -h: 查看帮助信息 - -p [file] [type] [version]: 将镜像文件打包为OTA升级包 - -u [file]: 将OTA升级包解包为bin镜像文件 - -v [file]: 查看OTA升级文件信息 - 程序输出的帮助信息,包括程序的名称,版本号,支持的命令行参数,支持的文件格式,支持的固件类型等信息 - 为了兼容性,程序以英文输出帮助信息 - 程序输出的OTA升级文件,文件名在输入文件名(去掉后缀名)的后面加上"_ota",后缀名统一为.bin。 # 7 程序测试说明 1. test1.bin, test2.hex, test3.cly 分别是3种格式的程序镜像文件 2. 其中test1.bin和test2.hex是同一个程序镜像的不同格式的文件, test1.ota是它们打包成OTA升级文件格式的文件,固件类型:E10H, 版本号:19.0 3. test3.ota是test3.cly打包成OTA升级文件格式的文件,固件类型:BMS,版本号:16.0 4. 调用下面的命令, 应该生成test1_ota.bin文件,可以通过验证此文件是否跟test1.ota一样来判断打包bin格式文件功能是否正确 ```bash ./otapack -p test1.bin E10H 19.0 ``` 5. 调用下面的命令, 应该生成test2_ota.bin文件,可以通过验证此文件是否跟test1.ota一样来判断打包hex格式文件功能是否正确 ```bash ./otapack -p test2.hex E10H 19.0 ``` 6. 调用otapack -p打包test3.cly应该生成test3_ota.bin文件,可以通过验证此文件是否跟test3.ota一样来判断打包cly格式文件功能是否正确 ```bash ./otapack -p test3.cly BMS 16.0 ```