平台: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. EFS加密

    目录 EFS简介 EFS的特点 EFS的缺陷 EFS证书 证书的导出 证书的安装 EFS加密 方法一 方法二 EFS简介 EFS(Encrypting File System,加密文件系统)是Wind ...

  2. Docker 也是本地开发的一神器:部署单机版 Pulsar 和集群架构 Redis

    原文链接:Docker 也是本地开发的一神器:部署单机版 Pulsar 和集群架构 Redis 一.前言: 现在互联网的技术架构中,不断出现各种各样的中间件,例如 MQ.Redis.Zookeeper ...

  3. maven 的安装与环境变量配置

    在http://maven.apache.org下载maven安装包 一.Windows 1.解压压缩包: jar -xvf "D:/apache-maven-3.5.0-bin.zip&q ...

  4. Luban图片压缩

    导入依赖: implementation 'top.zibin:Luban:1.1.3' public class MainActivity extends AppCompatActivity { p ...

  5. spring强行注入和引用的例子

    前提: public class DataProviderManagerImpl implements ApplicationContextAware @Override public void se ...

  6. oracle 存储过程深入学习与应用

    对于存储过程已经有过一周的学习时间了,但是之学到一些皮毛,争取根据基础,熟练后能进行深入. --1.存储过程创建存储过程的语法: CREATE [ OR REPLACE ] PROCEDURE pro ...

  7. 20202427-张启辰《Python3初学:罗马数字转阿拉伯数字》

    目录 20202427-张启辰<Python3初学:罗马数字转阿拉伯数字> 1.规则 2.局限性 3.Python3解决 20202427-张启辰<Python3初学:罗马数字转阿拉 ...

  8. 删除指定路径下指定天数之前(以文件的创建日期为准)的文件:BAT + REG + Ritchie Lawrence 日期函数

    代码如下: @echo off::演示:删除指定路径下指定天数之前(以文件的创建日期为准)的文件.::如果演示结果无误,把del前面的echo去掉,即可实现真正删除.::本例调用了 Ritchie L ...

  9. Django做验证码登录

    验证码 关注公众号"轻松学编程"了解更多. 1.作用 在用户登录,注册以及一些敏感操作的时候,我们为了防止服务器被暴力请求,或爬虫爬取,我们可以使用验证码进行过滤,减轻服务器的压力 ...

  10. NOIP 2017 Day1 解题报告

    总分:100分 T1,小凯的疑惑, 100分 T2,时间复杂度,0分 T3,逛公园,0分 T1 ###题意简化: 给定两个互质的数字,输出最大不能表示的数: 基础数论题目 代码: #include&l ...