BootLoader中基于多级校验状态上下文的智能断点续传方法与流程

摘要: 本发明涉及嵌入式固件升级,具体为一种bootloader中基于多级校验状态上下文的智能断点续传方法。背景技术:1、在嵌入式设备的固件在线升级过程中,由于车辆电源...
BootLoader中基于多级校验状态上下文的智能断点续传方法与流程

本发明涉及嵌入式固件升级,具体为一种bootloader中基于多级校验状态上下文的智能断点续传方法。

背景技术:

1、在嵌入式设备的固件在线升级过程中,由于车辆电源波动、通信中断、系统复位等异常情况,升级过程随时可能意外中断。断电续传技术作为提升固件升级可靠性的关键技术,广泛采用增量恢复策略,即:在升级过程中,可靠地记录"已成功接收并正确写入flash"的进度状态,以便从中断点恢复,避免从头开始重复传输已完成的数据,从而节省通信带宽和时间,提升升级的成功率。

2、目前,业界主流的断电续传方案采用单进度指针状态标记法。该方案在固件升级过程中,每成功接收一个数据块并完成flash写入后,便将最新的进度指针持久化保存至非易失性存储器。当升级因任何原因中断后,系统复位并再次进入bootloader模式时,系统读取该指针,从中断点继续下载,实现断电续传的基本功能。

3、然而,这种单进度指针方案存在显著技术缺陷:

4、flash数据写入与状态标记的持久化是两个独立的物理操作,无法保证原子性,若设备在“数据块已写入flash”但“进度指针尚未更新”的时间窗口内掉电,系统恢复后将陷入状态矛盾:物理上数据已存在,但逻辑上系统认为数据未写入;

5、由于全量crc校验值是基于数据流顺序累加计算的,若系统恢复重传断电时的数据块时,系统会重复计算该数据块的crc值,若不重传该数据块,则会跳过数据块导致crc基础值错误,最终必然导致固件完整性校验失败,引发升级死锁。

6、为解决上述问题,行业内虽有通过增加储能电容或采用双bank flash硬件冗余的方案,但均显著增加了硬件成本和电路复杂度。为此,本申请提出一种方法,在软件算法逻辑层面低成本、高鲁棒性地解决上述状态不一致问题。

技术实现思路

1、本发明的目的在于提供了bootloader中基于多级校验状态上下文的智能断点续传方法。

2、本发明所解决的技术问题为:现有bootloader固件升级中断点续传方案中,单进度指针状态标记法因flash数据写入与状态标记持久化无法保证原子性,导致系统在异常断电恢复后陷入物理数据与逻辑状态不一致的矛盾;同时,因全量crc校验值基于数据流顺序累加计算,断点恢复时无法准确处理已写入数据块的crc重算问题,最终导致固件完整性校验失败和升级死锁。

3、本发明可以通过以下技术方案实现:bootloader中基于多级校验状态上下文的智能断点续传方法,包括以下步骤:

4、步骤一、在非易失性存储器中划分写前快照存储区和写后快照存储区,定义快照统一存储结构体;

5、步骤二、针对任一待写入的数据块,分别在执行flash写入操作前以及flash写入成功后保存对应的写前快照和写后快照,随后将元数据持久化到非易失性存储区;

6、步骤三、系统异常复位重新上电进入bootloader时,首先进行上下文完整性校验,校验成功后进行快照信息有效性校验,并基于两个快照信息的有效性组合场景,匹配对应的恢复逻辑进行断点续传。

7、本发明的进一步改进在于:快照统一存储结构体至少包括魔数标识、当前数据块编号、已接收字节数和全量crc累计值,计算快照自身的crc-16校验值并添加至该结构体的尾部。

8、本发明的进一步改进在于:写前快照和所述写后快照保存至对应的快照存储区时,每次写入新快照信息后覆盖同一存储区中之前保存的快照信息。

9、本发明的进一步改进在于:步骤三中的上下文完整性校验过程为:读取flash中存储的上下文数据,重新计算该全局数据的全量crc累计值,并将其与两个快照信息中记录的全量crc累计值比对,至少一个快照信息中的全量crc累计值校验一致时,判定上下文完整性校验成功,否则判定校验失败。

10、本发明的进一步改进在于:步骤三中的快照信息有效性校验过程为:

11、重新计算快照信息结构体自身的crc-16,将计算值与结构体中保存的快照自身的crc-16校验值比对数值不一致判定对应快照信息损坏无效,否则有效;

12、将快照信息中魔数标识与上位机中存储的自定义魔数标识进行一致性校验,当魔数不匹配直接判定对应快照信息无效,否则有效。

13、本发明的进一步改进在于:根据两份快照信息的有效性组合场景执行对应恢复逻辑:

14、若写前快照与写后快照均有效,且两者的已接收字节数相等,则判定为第n个数据块写入前中断,从数据块编号n重新开始请求续传;

15、若写前快照与写后快照均有效,且两者的已接收字节数不相等,则判定为第n个数据块已写入但元数据未更新,采用写前快照的状态信息,从数据块编号n重新开始请求续传;

16、若仅有写前快照有效,则判定为第n个数据块写入过程中中断,采用写前快照的状态信息,从数据块编号n重新开始请求续传;

17、若仅有写后快照有效,则判定为第n个数据块写入及元数据更新完成但上下文保存中断,采用写后快照的状态信息,从数据块编号n+1开始请求续传;

18、若两个快照均无效,则执行安全降级策略,从头开始全量传输。

19、与现有技术相比,本发明具备以下有益效果:

20、1、本发明通过通过引入写前快照和写后快照的双快照机制,在数据写入flash前后分别保存系统状态快照,形成了完整的状态上下文。即使在数据写入完成但元数据未更新的临界状态下发生断电,系统也能通过快照对比准确判断实际状态,从根本上解决了原子性问题,确保了物理数据与逻辑状态的一致性。

21、2、本发明通过快照中保存的全量crc累计值,能够在系统恢复时准确重建crc累加器的初始状态。无论中断发生在数据写入前、写入中还是写入后,系统都能根据快照信息确定正确的crc基准值,避免了重复计算或遗漏计算导致的校验错误,从根本上消除了升级死锁的可能性。

22、3、基于写前快照和写后快照的有效性组合,本发明能够精确识别五类不同的中断场景:双快照均有效且字节数相等、双快照均有效但字节数不等、仅写前快照有效、仅写后快照有效、双快照均无效。针对每类场景,系统执行对应的最优恢复逻辑,显著提升了断点续传的准确性和效率;通过智能断点续传机制,即使在频繁断电的恶劣环境下,系统也能保证升级过程的连续性和完整性,大幅提升了固件升级的成功率。同时,避免了不必要的重复传输,节省了通信带宽和升级时间,改善了用户体验。

23、4、本发明的方法不依赖于特定的硬件平台或通信协议,可广泛应用于各种嵌入式设备的固件升级场景。快照结构体的设计具有良好的可扩展性,可根据实际需求增加其他状态字段,适应不同的应用场景。

1.bootloader中基于多级校验状态上下文的智能断点续传方法,其特征在于:包括以下步骤:

2.根据权利要求1所述的bootloader中基于多级校验状态上下文的智能断点续传方法,其特征在于,所述快照统一存储结构体至少包括魔数标识、当前数据块编号、已接收字节数和全量crc累计值,计算快照自身的crc-16校验值并添加至该结构体的尾部。

3.根据权利要求1所述的bootloader中基于多级校验状态上下文的智能断点续传方法,其特征在于,所述写前快照和所述写后快照保存至对应的快照存储区时,每次写入新快照信息后覆盖同一存储区中之前保存的快照信息。

4.根据权利要求2所述的bootloader中基于多级校验状态上下文的智能断点续传方法,其特征在于,步骤三中的上下文完整性校验过程为:读取flash中存储的上下文数据,重新计算该全局数据的全量crc累计值,并将其与两个快照信息中记录的全量crc累计值比对,至少一个快照信息中的全量crc累计值校验一致时,判定上下文完整性校验成功,否则判定校验失败。

5.根据权利要求2所述的bootloader中基于多级校验状态上下文的智能断点续传方法,其特征在于,步骤三中的快照信息有效性校验过程为:

6.根据权利要求2所述的bootloader中基于多级校验状态上下文的智能断点续传方法,其特征在于,根据两份快照信息的有效性组合场景执行对应恢复逻辑: