基于NAND存储的双分区OTA升级方案

系统启动:UBOOT--->KERNEL--->ROOTFS

分区分布:A1A2B1B2C1C2D结构;
 

基于NAND存储的双分区OTA升级方案_第1张图片

A1B1C1D为一组启动序列;

A2B2C2D为另外 一组启动序列;

下面介绍一下有后悔药式的升级方案:

1.1 通过curl从服务器下载升级包DDR里,下载完成后往下走;
1.2 校验升级包合法性,然后先解密、后解压到内存中;
1.3 flash_erase,nandwrite写入升级文件;
1.4 nanddump dump出升级分区的内容到TF卡里;
1.5 md5sum计算dump出的分区内容文件和写入前的源文件;
1.6 分析两个文件的md5值,不一致就重新刷升级包,最多十次;
1.7 两个文件md5值一致就设置uboot会识别的升级标识启动标记,以及
在root分区重建升级完成标记文件;
1.8 标记写完,后退出程序,先sync,后重启机器;
1.9 重启到uboot的时候,先读标记,从标记的新分区尝试启动;
1.10 【启动到应用程序里时同样会检测这个标记,发现是尝试启动标记后,
主动清除尝试启动标记,更换正常启动标记;】
1.11 单次升级到此已经完成;

关键在于有标记的新分区尝试启动,并且在uboot里能自动减一,如果升级是成功的,运行应用后,应用会检测这个标记,发现有这个标记就会复位,正式切换升级分区。始终是一个闭环的状态,如果应用启动不了,uboot这里尝试两次就会减到一个正常值,就不会再去尝试启动了,就回到了以前启动序列。

你可能感兴趣的:(linux,嵌入式硬件)