嵌入式linux用xdelta实现程序的远程升级

2019-07-12 15:09发布

  公司linux嵌入式产品,使用的3G网络,需要远程升级二进制软件,大概十几兆,不算大也不算小,如果每次都完全替换的话,在产品开发初期估计也是不小的流量,所以开始考虑是不是能通过打补丁的方法实现远程升级二级制文件。
  在网上搜索后发现确实有这种方法,使用的一个工具名叫:xdelta
  先说下配置:          1、电脑端系统:ubuntu14.04          2、嵌入式硬件:BBB板   
         3、嵌入式系统:TI SDK-08编译出来的....
 好像有两个版本,xdelta和xdelta3,后者功能更多。 直接安装xdelta3吧,虽然用不到其他强大功能,以后省的升级了。

  下面详述操作过程:
         1、从https://github.com/jmacd/xdelta-gpl下载源码。           2、先在电脑端安装xdelta3,头一次接触这种安装方式,之前直接./configure然后make,这个源码需要通过                  automake工具链来安装(参考安装方法:http://blog.csdn.net/maray/article/details/6676131)。也就是                下面步骤中用到的一些命令和库,automake工具链的安装可以百度。

                 1)、进入源码目录,执行aclocal生成aclocal.m4文件                  2)、执行autoconf生成configure文件                  3)、执行autoheader
                 4)、执行automake --add-missing,不用理会输出的warning
                 5)、分别执行: touch NEWS;touch README;touch AUTHORS;touch ChangeLog;  生成几个文件。                  6)、再执行一次automake --add-missing,照样不用理会输出的warning
                 7)、现在,可以执行./configure了,生成Makefile文件                  8)、执行make                  9)、执行sudo make install

                 按照步骤一步步走,就会成功安装xdelta3了。

         3、安装好xdelta3后,先使用一个二进制程序测试一下是否真的好使,需要用到下面两条命令:                 1)制作补丁文件:     xdelta3 -e -s(Sorce file) (Destination file) test.patch                  2)打补丁:      xdelta3 -d -s (Source file) test.patch (Destination file)              
              实际使用了一个13M左右的文件,制作好的补丁文件只有450K左右,当然这应该是跟据文件改动的              多少来变化的,不过这相对于源文件来说,肯定小很多了,这样升级的话会节省很多流量。
         4、既然好用,下面就应该编译到嵌入式linux系统中了,继续往下。。。        
         5、依然进入之前的xdelta3源码目录,先运行make distclean ,删除之前的编译文件。          6、执行./configure --help 查看帮助,根据以往经验,主要看下面部分:     


      7、执行./configure --prefix=/home/InstallDir CC=arm-linux-gnueabihf-gcc
             CXX=arm-linux-gnueabihf-g++ CPP=arm-linux-gnueabihf-cpp,结果报错:         
       
         根据提示,执行./configure --prefix=/home/InstallDir --host=arm-linux-gnueabihf   成功,生成了Makefile文件。          (一开始在--host=后面多了个空格,结果找不到编译器,各种摸不着头脑...)
     
     8、执行make;make install; 完成后在/home/InstallDir目录得到两个文件夹:   bin  share      9、将得到的文件夹bin中的文件复制到BBB板/usr/local/bin中,share中的文件复制到BBB板/usr/local/share中
     可能需要赋予执行权限,试着执行./xdelta3,发现如下错误输出:
 
    貌似是缺少lzma库,百度一下,是一个解压缩的软件,装。。。
    1、从https://tukaani.org/xz/下载xz的源码。      2、进入源码目录,看到也是automake工具链,不过貌似前面的步骤都已经做过了,直接:           ./configure --prefix=/home/InstallDir --host=arm-linux-gnueabihf
          然后make;makeinstall;
     3、将生成的安装文件分别复制到BBB板/usr/bin下相应的目录中。
   
   再次执行./xdelta3 -V出现下面输出:  
  搞定。。。。
  将之前电脑端测试的源文件和生成的补丁复制到BBB板,给源文件打补丁,生成的目标文件跟电脑端的目标文件一致,完成。