如果linux嵌入式系统采用norflash引导加载uboot方式。uboot启动后,可进行uboot、设备树、内核及文件系统等升级和烧写工作及启动参数设置等操作。当uboot出厂前如果出现问题,可以通过其他方式修改重写,但是考虑到在用户现场情况下,如果出现uboot升级烧写过程中断电或其他不可抗拒原因,将可能导致uboot烧写失败或启动分区信息被破坏,那么系统将无法启动。为了解决以上问题,特采用双uboot系统保证系统升级及正常工作。

BootLoader引导加载uboot功能及应用程序升级uboot功能。

        BootLoader中主要实现对双uboot的引导加载及错误处理。实现功能:系统启动后,根据启动标志位,校验优先启动uboot,校验通过启动,校验未通过加载次启动uboot。

        应用层对上层提供接口命令完成升级功能。升级功能:升级脚本根据传入的文件名称,自动查询用户目录下是否有该升级文件,如有则升级,没有则退出。升级后重启引导加载最新uboot。注意:每次升级只升级次启动地址,当前启动不变。

根据需求要求,进行如下划分

双UBOOT启动及升级设计

系统层:

        完成BootLoader引导双uboot工作。增加优先传启动标志位,可以对uboot启动进行管理,保证启动优先级。并且实现了优先启动分区出错跳转次启动地址的功能,保证设备工作状态。双uboot分别保存最新升级及上一版本uboot。每次启动优先启动最后一次升级版本。如果两个分区都启动失败,自动重启(或等待看门狗复位)。

应用层:

        完成升级功能。根据后台发送的推送信息,自动查找指定升级文件并对设备进行升级。升级成功后,重置优先启动标志位为从当前升级分区,同时返回升级成功信息;如升级出错则返回没找到升级文件、校验失败或升级失败等错误信息。

flash分区如下:

双UBOOT启动及升级设计

BootLoader引导加载uboot功能框图:

  双UBOOT启动及升级设计

BootLoader引导加载流程说明:

次启动分区标志值:由优先启动标志位决定,如果优先启动标志位为“first”,那么次启动分区标志值为“second”;如果优先启动标志位为“second”,那么次启动分区标志值为“first”

升级uboot功能。

双UBOOT启动及升级设计

升级uboot程序框图

软件流程分析及关键点说明:

CRC32校验方式:读取偏移地址后的uboot进行CRC32校验,校验值同头信息读回的校验值进行对比。

获取当前启动系统标志位,通过对cocloud_cur_uboot判断,获取次启动地址进行升级。

升级时要注意,一定要等文件写入存储设备后在进行升级,否则由于文件系统写入延时问题,可能导致升级失败。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-06-14
  • 2021-12-08
  • 2022-01-09
  • 2021-06-20
  • 2021-05-21
猜你喜欢
  • 2021-09-09
  • 2022-12-23
  • 2021-06-09
  • 2022-12-23
  • 2021-08-07
  • 2021-06-11
  • 2022-02-12
相关资源
相似解决方案