目前在做OTA差分算法研究,基于baidu.google, gayhub各种资料和途径,整理出来了三种OTA算法的安装步骤及使用方法。
我就不简介了,网上百度巴拉巴拉一大堆,我就把如何安装还有使用命令的教程给列出来。
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
两个绿色的就是编译出的命令行
差分: ./bsdiff [oldfile] [newfile] [patchName]
合成: ./bspatch [oldfile] [newFileName] [patchName]
对比文件是否有差异: sha1sum [fileName] 检验文件完整性和hash值。
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 编译:
成功结果:
执行命令的语法:
拆分: ./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值。
-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
cd xdelta-gpl-release3_1/xdelta3
在当前文件夹执行命令: ./run_release.sh
autoscan .
aclocal
autoheader
automake –add-missing
./configure
make
执行命令的方法
拆分 : ./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] 弃用/提供程序头部 (压缩)
系统:centos7
依赖:C++ gcc –v和 g++ -v 如果没有显示出对应的版本,则需要
执行 :yum groupinstall "Development Tools"
安装一些常用的开发者开发命令