ARM-Linux应用程序自动升级以及自动回滚的实现

1. 研究背景

现今,许多基于arm-linux平台开发的应用程序开发都具备了物理的网卡这样的外围设备,这也是为通过网络升级应用程序提供了诸多便利,网络的便捷,快速,稳定等诸多特点。今天,我们约定应用程序的自动升级与升级失败自动回滚所采用的升级方式是通过网络,当然,其他诸如usb,串口,sd卡等也可以类比实现。

2. 用到的工具

  • fw_printenv (这个在u-boot的tools/env)下能生成

生成fw_printenv需要用的命令为

    make env

同时还要拷贝fw_env.config到你的文件系统的/etc/fw_env.config中去
,具体可以百度

3. 实现的基本原理

  • 1.在u-boot中添加一个环境变量,命名为BOOTAPP_RETRYTIMES,具体在板载头文件中定义,比如,我移植TQ2416的开发板,而且在进入到引导内核之前,记得将该环境变量的值进行+1操作
那就在$(ROOTDIR)/include/configs/TQ2416.h下定义
#define BOOTAPP_RETRYTIMES 1
  • 2.在bootloader引导了内核启动后,进入到应用程序中时,读取该环境变量的值,判断该值如果超过3次,那么就运行上一版本的稳定程序,否则,清楚该变量的值为0,即:
unsigned char bootretrytime = getenv("BOOTAPP_RETRYTIMES");

    if(bootretrytime > 4){
        system("上一个版本的app");
    }else{
        system("刚才升级的app");
        system("fw_setenv BOOTAPP_RETRYTIMES 0");
    }

4.总结

其实,这样的理念可以用在许多不同场合的,适配不同处理器的程序自动升级以及升级失败回滚的方式上,利用bootloader引导程序中增加变量值,与应用程序中清除值,这种思维方式,可以实现诸多单片机程序的自动升级以及回滚等

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值