OTA三种差分算法安装&使用。bsdiff,hdiffpatch,xdelta3

 目前在做OTA差分算法研究,基于baidu.google, gayhub各种资料和途径,整理出来了三种OTA算法的安装步骤及使用方法。

 

1.bsdiff

我就不简介了,网上百度巴拉巴拉一大堆,我就把如何安装还有使用命令的教程给列出来。

a 依赖的tar bsdiff-4.3.tar.gz    bzip2-1.0.6.tar.gz

     解压:    tar –zxvf bsdiff-4.3.tar.gz  

      解压:    tar –zxvf bzip2-1.0.6.tar.gz

      重命名:  mv bzip2-1.0.6.tar.gz  bzip2

      将bzip2文件夹移动到 /usr/local/include :   sudo  cp –r bzip2 /usr/local/include

b 依赖的源

       yum install bzip2-devel.x86_64 进行下载

c修改 bsdiff-4.3 文件夹里面的 bsdiff.c 和bspatch.c

在include 头里添加

#include "bzip2/bzlib.c"

#include "bzip2/crctable.c"

#include "bzip2/compress.c"

#include "bzip2/decompress.c"

#include "bzip2/randtable.c"

#include "bzip2/blocksort.c"

#include "bzip2/huffman.c"

如图:

    

 

修改Makefile

 在.ifndef和.endif 前面加一个 tab 空出距离,否则报错

如图:

   

 

准备工作完成以后 进行编译 : make

 

1.1运行命令

两个绿色的就是编译出的命令行

 差分:  ./bsdiff  [oldfile] [newfile] [patchName]

 合成:  ./bspatch [oldfile] [newFileName] [patchName]

对比文件是否有差异: sha1sum  [fileName] 检验文件完整性和hash值。

2.hdiffpatch

a 需要用到的zip包:  HDiffPatch-master.zip , lz4-dev.zip, zstd-dev.zip, lzma-master.zip

 

b解压

   unzip HDiffPatch-master.zip

   unzip lz4-dev.zip

 

unzip zstd-dev.zip

unzip lzma-master.zip

 

重命名

mv HDiffPatch-master  hdiffpatch

mv lz4-dev  lz4

mv zstd-dev  zstd

mv lzma-master  lzma

 

在/usr/local/include/bzip2 目录下 将 bzlib.h 复制到 /usr/local/include  

sudo   cp bzlib.h  ../

安装 zlib:  yum install -y zlib zlib-devel (如果是ubuntu的话 需要  apt-get install zlib1g zlib1g-dev)

 

c 编译:

 

   

成功结果:

 

2.1使用命令

执行命令的语法:

   拆分: ./hdiffz [oldFile] [newFile] [patchName]

   合成: ./hpatchz [oldFile] [patchName][oldFileName]

命令详解:

hdiffz [-m[-matchScore]|-s[-matchBlockSize]]  [-c-compressType[-compressLevel]] [-o] oldFile newFile outDiffFile

hpatchz  [-m|-s[-s-cacheSize]]  [-o] oldFile diffFile outNewFile

建议命令参数:

      hdiffz run by: -s-128 -c-bzip2-9 [oldFile] [newFile] [outDiffFile]
    hpatchz run by: -s-4m [oldFile] [diffFile] [outNewFile]

对比文件是否有差异: sha1sum  [fileName] 检验文件完整性和hash值。

2.2hdiffz 参数简介

-m matchScore

 

使用matchScore将所有文件加载到内存中,默认是difffileSize 这种方式不推荐.

 

 

-s-matchBlockSize

所有文件加载为流式处理,参数由matchBlockSize决定,参数设置例如 128 128K 128M

默认128,建议32 - 16K 64K 1M等。

 

特殊选项:

C-压缩-压缩能级

设置差分文件的压缩类型和级别,默认不压缩;

支持压缩类型和级别:

(参考:HTTPS://Github. COM/SISON/LZTAMP/BROB/MARST/LZTAT17171SORTED.D)

       -zlib[-{1..9}]              DEFAULT level 9

        -bzip2[-{1..9}]             DEFAULT level 9
        -lzma[-{0..9}[-dictSize]]   DEFAULT level 7
            dictSize(==decompress stream size) can like 4096 or 4k or 4m or 128m etc..., DEFAULT 4m
        -lz4                         no level
        -lz4hc[-{3..12}]            DEFAULT level 11
        -zstd[-{0..22}]             DEFAULT level 20

2.3hpatchz 参数简介

内存参数:

  -m  旧文件全部加载入内存

  -s-cacheSize  旧文件以流的方式加载。

  cacheSize can like 262144 or 256k or 512m or 2g etc..., DEFAULT 128m

 

3.Xdelta3

  1. 依赖的包 xdelta-gpl-release3_1.zip
  2. 解压,unzip xdelta-gpl-release3_1.zip

cd   xdelta-gpl-release3_1/xdelta3

在当前文件夹执行命令:   ./run_release.sh

                                        autoscan .

                                        aclocal

                                        autoheader

                                        automake –add-missing

                                       ./configure

                                       make

    

 

3.1命令

执行命令的方法

拆分 :  ./xdelta3 -v -e -s [oldFile] [newFile] [patchName]

合成 :  ./xdelta3 -v -d -s [oldFile] [patchName] [newFileName]

对比文件是否有差异: sha1sum  [fileName]  检验文件完整性和hash值。

命令详细参数

用法: xdelta3 [命令/选项] [input [output]]

特殊命令名:

    config      输出 xdelta3 配置信息

    decode      解压缩 input

    encode      压缩 input

    test        运行内置的测试

为 VCDIFF 输入所用的特殊命令:

    printdelta  输出整个变化的信息

    printhdr    输出第一个窗口的信息

    printhdrs   输出所有窗口的信息

标准选项:

   -0 .. -9     压缩等级

   -c           使用 stdout

   -d           解压缩

   -e           压缩

   -f           强制覆盖

   -h           显示帮助

   -q           静默模式

   -v           使用详细信息(最大2)

   -V           显示版本

内存选项:

   -B bytes     源窗口大小

   -W bytes     输入窗口大小

压缩选项:

   -s source    如果存在,选择来源文件从哪儿复制

   -S [djw|fgk] 启用/弃用二级压缩

   -N           弃用小字符串匹配压缩

   -D           弃用外部解压缩 (压缩/解压缩)

   -R           弃用外部重压缩 (压缩)

   -n           弃用校验 (压缩/解压缩)

   -C           软配置 (压缩, 无文档的)

   -A [apphead] 弃用/提供程序头部 (压缩)

 

4.系统环境

系统:centos7

依赖:C++ gcc –v和 g++ -v  如果没有显示出对应的版本,则需要

执行 :yum groupinstall "Development Tools"

   安装一些常用的开发者开发命令

  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OTA(Over-The-Air)是一种通过无线网络更新STM32芯片上的固件的方法。它是在不需要连接到计算机的情况下,通过网络直接将新的固件版本传输到设备上的一种方式。 OTA的主要思想是仅传输二进制文件中更改的部分,而不是整个文件。这样可以大大减少传输所需的时间和带宽。它通常与增量补丁算法一起使用,该算法可以将新固件版本中与旧版本不同的部分进行提取,并将其打包成一个小巧的补丁文件。 在STM32芯片上进行OTA更新通常需要以下步骤: 1. 设备端准备:首先,设备端需要有OTA升级功能的固件,并确保之前的固件版本可以作为基础版本。当发现有新的固件版本可用时,设备端会连接到OTA服务器。 2. OTA服务器准备:OTA服务器存储着所有可用的固件版本,并且能够对比设备端当前的固件版本和最新版本之间的异。服务器使用增量补丁算法生成所需的异文件,并将其发送给设备端。 3. 设备端更新:设备端接收到异文件后,它会使用与服务器相同的增量补丁算法异应用于当前的固件版本。这样,设备只需更新少量的二进制数据,而不是整个固件文件。 4. 固件验证:更新完成后,设备端会对新的固件版本进行验证,确保其完整性和正确性。这通常涉及到校验和或数字签名等机制。 OTA是一种高效、节省带宽和时间的固件更新方式,可以大大提高设备的灵活性和可维护性。同时,它也需要设备端和OTA服务器的配合,以及对增量补丁算法和固件验证的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值