平台:imx8mm
系统:linux 4.4
 
如果需要系统了解swupdate,请参考文章:嵌入式系统更新swupdate分类
 
一.制作升级包
emmcsetup.lua用来描述update执行前的preinst()和执行后的postinst()
这里主要是preinst(),如果没有mmcblk1p2分区就创建一个。
 
sw-description主要描述升级包的情况
software =
{
    version = "1.0.0.1"; //升级包版本号
    imx8mmevk = {
        hardware-compatibility: ["1.0"];  //匹配硬件
        stable = {
            copy1 : {  //copy1的情况
                images: (
                    {
                        filename = "fsl-image-validation-imx-imx8mmevk.ext4.gz"; //升级包rootfs的名字,需要是gz的格式
                        sha256 = "730ca9afd4cba2360f685ff4b6e8f5d00fa44001770d38e8505e3ec5a98bfd13"; //校验码
                        type = "raw";
                        compressed = true;
                        device = "/dev/mmcblk1p2"; //刷机的分区
                    }
                );
                scripts: (
                    {
                        filename = "emmcsetup.lua"; //lua脚本
                        type = "lua";
                        sha256 = "9351c163162a680131607fd03e26e8dfb8a9afbed0ab463884d24aa8eaa93a93" //校验码
                    }
                );
            };
            copy2 : {
                images: (
                    {
                        filename = "fsl-image-validation-imx-imx8mmevk.ext4.gz";
                        sha256 = "730ca9afd4cba2360f685ff4b6e8f5d00fa44001770d38e8505e3ec5a98bfd13";
                        type = "raw";
                        compressed = true;
                        device = "/dev/mmcblk1p3";
                    }
                );
                scripts: (
                    {
                        filename = "emmcsetup.lua";
                        type = "lua";
                        sha256 = "9351c163162a680131607fd03e26e8dfb8a9afbed0ab463884d24aa8eaa93a93"
                    }
                );
            };
        }
    }
}
校验码由sha256sum生成
示例:sha256sum fsl-image-validation-imx-imx8mmevk.ext4.gz > fsl-image-validation-imx-imx8mmevk.ext4.gz.sha256sum
 
cpio-package.sh打包升级包脚本
MODE="RSA"
CONTAINER_VER="1.0.0.1"
PRODUCT_NAME="adu-update-image-imx8mm"
//打包的所有文件的名字
FILES="sw-description sw-description.sig fsl-image-validation-imx-imx8mmevk.ext4.gz emmcsetup.lua" 
#if you use RSA
if [ x"$MODE" == "xRSA" ]; then
     openssl dgst -sha256 -sign openssl/priv.pem sw-description > sw-description.sig //生成校验文件
else
  openssl cms -sign -in sw-description -out sw-description.sig -signer mycert.cert.pem \
    -inkey mycert.key.pem -outform DER -nosmimecap -binary
fi
 
for i in $FILES;do
     echo $i;done | cpio -ov -H crc > ${PRODUCT_NAME}_${CONTAINER_VER}.swu //用cpio打包
最后生成adu-update-image-imx8mm_1.0.0.1.swu升级包,拷贝到机器上。
 

生成私钥和公钥

首先,需要生成私钥

openssl genrsa -aes256 -out priv.pem

这里需要一个密码。可以从文件中去获取这个密码 - 当然,
这个密码文件必须保护好,防止被入侵。

openssl genrsa -aes256 -passout file:passout -out priv.pem

使用如下命令,从私钥导出公钥:

openssl rsa -in priv.pem -out public.pem -outform PEM -pubout

"public.pem" 包含了适用于swupdate的格式的密钥。
该文件可以通过-k参数在命令行传递给swupdate。

 
二.板子上进行升级
使用fw_printenv设置启动参数
 
升级
adu-update-image-imx8mm_1.0.0.1.swu是升级包,public.pem是公钥, swupdate.log升级过程的log
swupdate -v -i adu-update-image-imx8mm_1.0.0.1.swu -k /adukey/public.pem -e "stable,copy2" &>> /aduc-logs/swupdate.log
 
切换启动分区
fw_setenv mmcroot /dev/mmcblk1p3 //切换成mmcblk1p3 这个root分区启动,然后reboot
 

swupdate实例的更多相关文章

  1. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  2. js-静态、原型、实例属性

    本篇来说一下js中的属性: 1.静态属性 2.原型属性 3.实例属性 静态属性: function klass(){} var obj=new klass(); klass.count=0; klas ...

  3. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  4. EntityFramework Core 1.1是如何创建DbContext实例的呢?

    前言 上一篇我们简单讲述了在EF Core1.1中如何进行迁移,本文我们来讲讲EF Core1.1中那些不为人知的事,细抠细节,从我做起. 显式创建DbContext实例 通过带OnConfiguri ...

  5. redis集成到Springmvc中及使用实例

    redis是现在主流的缓存工具了,因为使用简单.高效且对服务器要求较小,用于大数据量下的缓存 spring也提供了对redis的支持: org.springframework.data.redis.c ...

  6. 流程开发Activiti 与SpringMVC整合实例

    流程(Activiti) 流程是完成一系列有序动作的概述.每一个节点动作的结果将对后面的具体操作步骤产生影响.信息化系统中流程的功能完全等同于纸上办公的层级审批,尤其在oa系统中各类电子流提现较为明显 ...

  7. UWP开发之Template10实践:本地文件与照相机文件操作的MVVM实例(图文付原代码)

    前面[UWP开发之Mvvmlight实践五:SuspensionManager中断挂起以及复原处理]章节已经提到过Template10,为了认识MvvmLight的区别特做了此实例. 原代码地址:ht ...

  8. echarts+php+mysql 绘图实例

    最近在学习php+mysql,因为之前画图表都是直接在echart的实例demo中修改数据,便想着两相结合练习一下,通过ajax调用后台数据画图表. 我使用的是echart3,相比较第二版,echar ...

  9. 【HanLP】HanLP中文自然语言处理工具实例演练

    HanLP中文自然语言处理工具实例演练 作者:白宁超 2016年11月25日13:45:13 摘要:HanLP是hankcs个人完成一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环 ...

随机推荐

  1. centos 8 集群Linux环境搭建

    一.集群Linux环境搭建 1. 注意事项 1.1 windows系统确认所有的关于VmWare的服务都已经启动 打开任务管理器->服务,查看五个VM选项是否打开. 1.2 确认好VmWare生 ...

  2. ret2libc--ROP(pwn)漏洞入门分析

    背景知识 fflush 函数,清理缓冲区. fflush(stdout) 一次性输出以上缓冲区所有数据 read(0,&buf,0xAu) 0代表标准输入,标准输出1,标准错误2,&b ...

  3. image restoration(IR) task

    一般的,image restoration(IR)任务旨在从观察的退化变量$y$(退化模型,如式子1)中,恢复潜在的干净图像$x$ $y \text{} =\text{}\textbf{H}x\tex ...

  4. JSP标签语法、JSTL标签库、EL表达式辨析

    <一.JSP > JSP 语法语法格式: <% 代码片段 %>或者<jsp:scriptlet> 代码片段</jsp:scriptlet> JSP声明 ...

  5. 【源码】spring循环引用

    spring在单例,非构造方法注入的情况下允许循环依赖 1.循环依赖 a引用b,b引用a.a创建的时候需要b,但是b没有创建,需要先去创建b,b创建的时候又没有a,这就出现的循环依赖的问题 2.为什么 ...

  6. Nginx 配置请求响应时间

    1.常见默认nginx.conf配置日志格式 log_format main '$remote_addr - $remote_user [$time_local] "$request&quo ...

  7. 【持续更新】Tomcat低级错误

    0(模板) 所犯错误: 现象: 报错内容: 1 所犯错误: 声明@Webservlet中未加"/"符号: 现象: 能够Connected to server,但是代码报错,且无法顺 ...

  8. [Luogu P2257] YY的GCD (莫比乌斯函数)

    题面 传送门:洛咕 Solution 推到自闭,我好菜啊 显然,这题让我们求: \(\large \sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)\in prime]\) 根 ...

  9. 使用IDEA完成一个SpringBoot的demo

    打算开始做毕业设计了,写一些博客记录一下做毕业设计的过程. 前两天从老师那里拿了学长学姐做的非常简陋的代码,配置环境跑了一下,老师找我的时候说还剩下50%的工作,但感觉至少还有70%. 废话不多说,今 ...

  10. 小学生学习C++应该具备哪些基础?

    一.电脑操作基础: 应该具备一些必要的电脑相关的知识,如操作系统的相关知识,如何打开.编辑.保存文件.对电脑的能力有一些基本的认识,以及会使用鼠标,键盘熟练输入. 磨刀不误砍柴工,至少要做到能快速找到 ...