固件升级使用FOTA(Firmware Over-The-Air)
方式时,可以采用传输差分包的形式来减小升级包的大小,能够带来空口传输时间减小、降低终端功耗等优势。目前比较常见的算法有xdelta
使用的Vcdiff
及Bsdiff
等。
Vcdiff
Vcdiff
可以实现文件的差分并压缩的功能,当原文件为空时,则相当于对新的文件直接压缩。Vcdiff
采用差分文件包含:ADD
、COPY
、RUN[
、NOOP(
空)]
等操作方式。生成差分文件前,需要首先进行Vcdiff decoding
,具体采用128
进制来重新编码,带来的好处:
一是在不同的系统中统一采用8
比特的字节编码方式,二是对于小数字则可以节省存储空间;在RF3284
给出的示例将123456789
,经过编码后表示为MSB+58,MSB+111,MSB+26,0+21
,二进制值为10111010 11101111 10011010 0010101
,最高位MSB
用来表示数据是否完成,1
时表示下个字节仍属于同一数据块,即123456789 = 128*(128*(58 * 128 + 111) + 26) + 21
。编码完成后的文件生成差分格式包,也可进行压缩后再进行传输。差分包执行过程示例如下,
旧的文件内容为a b c d e f g h i j k l