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

来源:互联网 发布:国际顶级域名数据库 编辑:程序博客网 时间:2024/06/06 15:43

  公司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板,给源文件打补丁,生成的目标文件跟电脑端的目标文件一致,完成。



   













原创粉丝点击