swupdate 之 readback handler
背景
使用 swupdate 作为 OTA 方案 ,有项目要求在写入数据到分区之后需要再次读出校验。
初步实现:readout-verify attribute
初步分析有两种方式
- 方案一
在每一笔数据写入后,立刻读出校验。此时原始数据还在 buffer 中,读出的数据直接跟原始 buffer 做比较即可
- 方案二
在将分区数据完全写入后,再读出校验。
注意在流式升级的情况下,源数据是分片传输写入的,用完即弃,因此写完整个分区之后已经没有原始数据可以比较了。
此时要么重新从数据源获取(不可取,相当于下载两次 OTA 包),要么需要在 OTA 包中额外配置好校验值,对读出数据计算得到的校验值进行比较。
出于简单考虑,选择了方案一进行实现,为 image 增加了一个 readout-verify 属性,配置后在每笔数据写入后均会读出校验,校验的方式是直接跟源 buffer 比较。
功能很简单,但由于源码中并未考虑这种情况,因此用于校验的 buffer 无法传递,只能反复申请和释放,问题不大只是看着有点别扭。
尝试把 patch 发出来,想听听作者的意见,结果作者回复已经有一个 readback handler 用于支持读出分区数据进行校验了。
社区实现: readback handler
这个 reabback handler 采用 scripts 的形式,在所有 image 写入完成后,再对 image 进行读出校验,sha256 校验值需要在 sw-description 中预先配置好。
举个例子:
scripts: (
{
device = "/dev/mmcblk2p1";
type = "readback";
properties: {
sha256 = "e7afc9bd98afd4eb7d8325196d21f1ecc0c8864d6342bfc6b6b6c84eac86eb42";
size = "184728576";
offset = "0";
};
}
);
功能顾名思义,就是读出指定 device 的指定范围的数据,算出 sha256 值,验证与配置中的 sha256 值是否一致。
具体的配置描述如下表。
| 字段 | 类型 | 描述 |
|---|---|---|
| device | string | 要校验的分区节点 |
| type | string | 标注handler |
| sha256 | string | 分区的sha256值 |
| size | string | 要校验的数据大小(单位:字节)。如果未设置或设置为0,则会自动获取分区大小 |
| offset | string | 要校验的数据偏移(单位:字节)。如果未设置,默认为0 |
总结
稍微比较下两种实现(以下列出的缺点是相对另一个而言,所以优点就不赘述了)
readback handler 的缺点在于
- 实现较为复杂,使用也较为复杂,需要配置
sha256(当然一般是通过脚本自动化生成) - 先完全写入再校验,即出问题时不会立刻报错保留现场,而是在所有
image均写入完成后,才进行校验 - 对某些定制不方便实现,例如要求在出错时重试该笔数据的写入
readout-verify attribute 的缺点在于
- 在某些情况下不适用,例如配合
ubi handler,配合rdiff handler - 只能保证该笔数据写入正确,无法保证完整数据未被篡改。例如写入
A数据后读出校验成功,再写入B时影响到了A,则无法被检测到
综上,优先选择社区默认的 readback handler,实在有无法满足的定制化需求时,再考虑自行实现特殊属性和行为。
blog: https://www.cnblogs.com/zqb-all/p/12827506.html
公众号:https://sourl.cn/T4Skam
swupdate 之 readback handler的更多相关文章
- 【swupdate文档 四】SWUpdate:使用默认解析器的语法和标记
SWUpdate:使用默认解析器的语法和标记 介绍 SWUpdate使用库"libconfig"作为镜像描述的默认解析器. 但是,可以扩展SWUpdate并添加一个自己的解析器, ...
- android Handler介绍
Handler使用介绍: Handler根据接收的消息,处理UI更新.Thread线程发出消息,通知Handler更新UI. Handler mHandler = new Handler() { p ...
- Handler
1.1 继承AbstractController优点:能定制请求方式 package cn.happyl.controller; import javax.servlet.http.HttpServl ...
- Android消息处理机制(Handler、Looper、MessageQueue与Message)
Android是消息驱动的,实现消息驱动有几个要素: 消息的表示:Message 消息队列:MessageQueue 消息循环,用于循环取出消息进行处理:Looper 消息处理,消息循环从消息队列中取 ...
- Android笔记——Handler Runnable与Thread的区别
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的run() ...
- Android消息传递之Handler消息机制
前言: 无论是现在所做的项目还是以前的项目中,都会遇见线程之间通信.组件之间通信,目前统一采用EventBus来做处理,在总结学习EventBus之前,觉得还是需要学习总结一下最初的实现方式,也算是不 ...
- Handler系列之内存泄漏
本篇简单的讲一下平常使用Handler时造成内存泄漏的问题. 什么是内存泄漏?大白话讲就是分配出去的内存,回收不回来.严重会导致内存不足OOM.下面来看一下造成内存泄漏的代码: public clas ...
- Handler系列之创建子线程Handler
上一篇我介绍了Handler机制的工作原理,默认情况下,ActivityThread类为我们创建的了主线程的Looper和消息队列,所以当你创建Handler之后发送消息的时候,消息的轮训和handl ...
- Handler系列之原理分析
上一节我们讲解了Handler的基本使用方法,也是平时大家用到的最多的使用方式.那么本节让我们来学习一下Handler的工作原理吧!!! 我们知道Android中我们只能在ui线程(主线程)更新ui信 ...
随机推荐
- SPFA()判环
1 SPFA()判负环 SPFA()判负环的原理就是在求最短路的过程中,如果存在负环,比如说要求从A到a的最短距离,设为s,但是经过a->c->b->a可以更短,所以如果一直经过a- ...
- windows批处理protoc生成C++代码
1 首先需要生成protoc的可执行文件,具体可以参考 https://www.cnblogs.com/cnxkey/articles/10152646.html 2 将单个protoc文件生成.h ...
- 如何在Ubuntu 18.04上安装Nginx
Nginx功能之强大,想必大家比我更清楚. 百度百科:Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx是由伊戈尔 ...
- 2.react-插件
PC: antd(蚂蚁金服)https://ant.design/index-cn 移动: mobile-antd(蚂蚁金服)https://mobile.ant.design =========== ...
- 通过Java + selenium +testNG + Page Objects 设计模式 实现页面UI的自动化
Page Objects 设计模式 简单的讲,类似与Java面向对象编程,把每个页面都抽象为一个对象类,将页面元素的定位.业务逻辑操作分离开,然后我们可以通过testNG实现业务流程的控制 与 测试 ...
- C++创建动态库
[C++]创建动态库 有很多方法,这个只是其中一种 比较简洁的方法. char* __stdcall correction(char* str) char *_result = new char[se ...
- shiro:集成Springboot(六)
1:导入相关依赖 <!--thymeleaf 模板引擎依赖包--> <dependency> <groupId>org.springframework.boot&l ...
- redis: 其他数据类型(八)
1.geospatial 地理位置 有效的经度从-180度到180度 有效的纬度从-85.05112878度到85.05112878度 当坐标位置超出上述指定范围时,该命令将会返回一个错误 底层实现原 ...
- 在.NET Core中用最原生的方式读取Nacos的配置
背景 之前老黄写过一篇<ASP.NET Core结合Nacos来完成配置管理和服务发现>简单介绍了如何让.NET Core程序接入Nacos,之前的SDK里面更多的是对Nacos的Open ...
- python信息收集(一)
在渗透测试初期,需要进行大量的信息收集.一般情况下,信息收集可以分为两大类----被动信息收集和主动信息收集. 其中,被动信息收集主要是通过各种公开的渠道来获取目标系统的信息,例如:站 ...