Linux OTA升级,yocto上平台不提供,是需要客户自己集成的,目前yocto上有swupdate、Mender.io、RAUC,swupdate是免费的使用的相对多一些。不过要是有钱的话最好还是用mender.io,mender根据数量不同收费价格不一样。现在介绍一下swupdate的使用。

1.根据当前基线版本,下载相应的swupdate软件。比如我目前用的是morty的基线,下载方法:

git clone https://github.com/sbabic/meta-swupdate.git -b morty

2.将swupdate meta数据添加到layer层

echo "BBLAYERS += \" \${BSPDIR}/sources/meta-swupdate \"" >> $BUILD_DIR/conf/bblayers.conf

3.编译

bitbake swupdate

由于ota升级会涉及到修改uboot环境变量,所以还需要添加 u-boot-fw-utils软件

bitbake u-boot-fw-utils

根据swupdate官网的说明,uboot需要至少2016.05以上的版本,因为我之前用的分支krogoth对应的uboot版本是2016.03,所以后来我就升级了基线,将uboot版本升级到2017.03版本,否则的话编译swupdate时会报错。

cxt@ubuntu:~/code/nxp/imx6ull_morty/imx6ullevk_build/tmp/work/cortexa7hf-neon-poky-linux-gnueabi/swupdate/2017.01-r0/git$ ls
archival  corelib   handlers  Kconfig        Makefile.flags  parser           scripts    swupdate_unstripped      tags
COPYING   doc       include   Makefile       Makefile.help   progress_client  suricatta  swupdate_unstripped.map  www
core      examples  ipc       Makefile.deps  mongoose        README.md        swupdate   swupdate_unstripped.out

成功编译之后 会生成swupdate的bin文件,对编译结果打包放进rootfs文件系统。

IMAGE_INSTALL_append += "cmake python3 python3-pip swupdate swupdate-www u-boot-fw-utils”

配置完成开机会默认启动swupdate,启动信息:

Starting swupdate ...
Swupdate v2017.1.0

Licensed under GPLv2. See source distribution for detailed copyright notices.

Searching for custom LUA handlers :[string "require ("swupdate_handlers")"]:1: module 'swupdate_handlers' not found:
        no field package.preload['swupdate_handlers']
        no file '/usr/share/lua/5.3/swupdate_handlers.lua'
        no file '/usr/share/lua/5.3/swupdate_handlers/init.lua'
        no file '/usr/lib/lua/5.3/swupdate_handlers.lua'
        no file '/usr/lib/lua/5.3/swupdate_handlers/init.lua'
        no file './swupdate_handlers.lua'
        no file './swupdate_handlers/init.lua'
        no file '/usr/lib/lua/5.3/swupdate_handlers.so'
        no file '/usr/lib/lua/5.3/loadall.so'
        no file './swupdate_handlers.so'
Custom handlers not found, no error, skipping...

Registered handlers:
        flash
        raw
        rawfile
        lua
        shellscript
        preinstall
        postinstall
        uboot
Main loop Daemon
Mongoose web server v. 3.8 with pid 350 started on port(s) 8080 with web root [/www]

先确认设备的ip地址,比如我的192.168.0.108,然后可以在网页输入:http://192.168.0.103:8080/

弹出如上界面表示服务端已经启动,可以点击需要更新的固件了。

4. 升级固件制作

ota升级固件需要符合固定的格式,否则升级会失败。固件制作需要包含一个描述文件还有需要升级的固件

固件定制脚本swu_create.sh

IMG_FILES="sw-description rootfs.ext4.gz"

for f in ${IMG_FILES} ; do
    echo ${f}
done | cpio -ovL -H crc > buildroot.swu
~

描述说明文件sw-description

software =
{
    version = "1.0.1";
    imx6ull14x14evk: {
    hardware-compatibility: [ "1.0" ];
    images: (
            {   
                filename = "rootfs.ext4.gz";
                device = "/dev/mmcblk1p3";
                compressed = true;
                type = "raw";
            }   
        );  
    uboot: (
            {   
                name = "testbootargs";
                value = "12345";
            },  
            {   
                name = "bootargs";
                value = "console=ttymxc0,115200 root=/dev/mmcblk1p3 rootwait rw";
            }   
        );  
    };  
}

这个具体的参数说明可以参考swupdate官网 https://sbabic.github.io/swupdate/swupdate-ipc.html

我的文件系统初始挂载在mmcblk1p2分区,现在需要将rootfs烧录到p3分区并从p3分区启动,uboot的环境的变量就需要做修改。

升级如果提示这个错误,可以看看uart输出信息,比如uart显示

Version 1.0.1
[NOTIFY] : SWUPDATE failed [0] ERROR parser/parser.c : parse_hw_compatibility : 163 : HW compatibility not found

[NOTIFY] : SWUPDATE failed [0] ERROR parser/parser.c : parser : 509 : Found nothing to install

[NOTIFY] : SWUPDATE failed [0] ERROR parser/parser.c : parse_json : 598 : JSON File corrupted
说明我的设备端的compatibility参数没有设置,

设备端执行:echo "imx6ull14x14evk 1.0" > /etc/hwrevision

然后在升级就成功了。

还有一点需要注意,烧录的升级固件rootfs.ext4.gz,必须是ext4 的gz后缀压缩文件,否则升级也会失败。

5.suricatta 服务器多设备升级

这种升级方式只是验证单个设备,针对多个设备升级,swupdate支持suricatta模式,这个需要在defconfig文件打开一下开关

recipes-support/swupdate/swupdate/defconfig

--- a/recipes-support/swupdate/swupdate/defconfig
+++ b/recipes-support/swupdate/swupdate/defconfig
@@ -38,6 +38,13 @@ CONFIG_EXTRA_LDLIBS=""
 # CONFIG_DOWNLOAD is not set
 CONFIG_WEBSERVER=y
 
+
+CONFIG_HAVE_LIBCURL=y
+CONFIG_CURL=y
+CONFIG_JSON=y
+CONFIG_SURICATTA=y
+CONFIG_SURICATTA_HAWKBIT=y
+
 #
 # Webserver Features
 #
(END)

板端配置完成了,还有服务器后台需要配置。

pc 主机端安装docke 模拟器的方式:

参考:https://juejin.im/post/5e1d4778e51d451c7a435bfb

sudo docker run -p 8080:8080 hawkbit/hawkbit-update-server:latest \
     --hawkbit.dmf.rabbitmq.enabled=false \
     --hawkbit.server.ddi.security.authentication.anonymous.enabled=true

服务器配置完成之后,确认服务器的ip地址,比如我的192.168.0.104,然后在设备端执行

swupdate -l 5 -u '-t default -u http://192.168.0.104:8080 -i 27'

然后就可以在服务器的网页界面看到我的设备了,我的服务端只能检测到有设备连接,但是如何对设备进行固件升级一直没有成功,这个涉及到服务器后台配置,实在是不擅长,就没有继续研究了。

swupdate的服务器用的是开源hawkbit服务器,有关资料可以参考:https://www.eclipse.org/hawkbit/

swupdate的整体流程大概是这样的。

Linux OTA升级相关推荐

  1. rk3288 linux OTA A/B升级分析

    最近在做rk3288 linux的OTA A/B升级方案,因此研究了一下rk3288自带的OTA升级流程,将其记录下来. 1.概述 1.1 什么是OTA升级? OTA是Over-the-Air的简称, ...

  2. linux ab双分区升级,AB 系统OTA升级

    A/B System 概述 Android从7.0开始,引入了新的OTA升级方式 A/B System Updates A/B系统是指设备上有A和B两套可以工作的系统(用户数据只有一份,为两套系统共用 ...

  3. OTA升级flash分区

    什么是在线OTA升级 -         OTA是Over-the-Air的简写,空中下载技术的意思. -         OTA在线升级在日常消费电子产品中很常见,比如手机,机顶盒等,通过网络,下载 ...

  4. android怎么ota升级,Android OTA升级过程

    通过网络或直接本地获取到OTA升级包之后,通过程序就可开始Android的升级.本文描述这一过程. 在获取到OTA升级包之后,可以直接通过android.os.RecoverySystem.insta ...

  5. Android OTA升级(2):开启升级过程

    通过网络或直接本地获取到OTA升级包之后,通过程序就可开始Android的升级.本文描述这一过程.   在获取到OTA升级包之后,可以直接通过android.os.RecoverySystem.ins ...

  6. Android系统分析—OTA升级

    Android系统分析-OTA升级 1. recovery 1.1 升级流程 2. 辅助功能 2.1 ui.cpp 2.2 screen_ui.cpp 2.3 default_device.cpp 2 ...

  7. Tina R329 swupdate OTA升级步骤

    第一步: 编译路径执行make menucinfig和make ota_menucinfig中分别选中: (1)Allwinner > swupdate (2)Allwinner > sw ...

  8. AB 系统OTA升级介绍

    A/B System 概述 Android从7.0开始,引入了新的OTA升级方式 A/B System Updates A/B系统是指设备上有A和B两套可以工作的系统(用户数据只有一份,为两套系统共用 ...

  9. Android OTA 升级专栏文章导读

    Android OTA 升级专栏文章导读 文章目录 Android OTA 升级专栏文章导读 1. 快速入口 2. 简要介绍 1. 基础入门:<Android A/B 系统>系列 2. 核 ...

  10. Android OTA 升级

    原文:http://fanwei51880.blog.163.com/blog/static/32406740201172325219944/ Android OTA升级之一:编译升级包 作者: 宋立 ...

最新文章

  1. js把base64串解析成中文_回文问题终极篇:最小代价构造回文串
  2. R语言ggplot2可视化将两个dataframe可视化的结果组合在一起实战:combining two plots from different data.frames
  3. SAP CRM WebClient UI的excel导出功能是否能启用,取决于这个逻辑
  4. 二叉查找树 java代码实现
  5. Idea更改console控制台 日志颜色(非插件)
  6. Leetcode: mimimum depth of tree, path sum, path sum II
  7. 英特尔第十代处理器为什么不支持win7_为什么i7处理器不支持win7系统,背后的真实原因?...
  8. ALSA音频架构 -- aplay播放流程分析
  9. 阿里云购买域名到建站的全流程怎么做?
  10. 差分 线宽 线距_需要做阻抗的信号线时应该怎样计算线宽、线距规则?
  11. 诺基亚9 PureView正式发布
  12. 软件自动化测试全套视频教程
  13. 『可道云』内网穿透牛刀小试,会敲键盘就能搭建的私有云网盘
  14. 51单片机多路独立按键开关程序
  15. 黄土高原主要是什么树木
  16. 微软模拟飞行2020服务器多少内存,微软飞行模拟2020配置需求高吗 微软飞行模拟2020配置要求-游侠网...
  17. (一)C#Winform导入Excel数据到datagridview控件
  18. 欧洲杯上那让人惊叹的vivo蓝
  19. 彩虹易支付插件后台结算、会员中心秒提现集成包(哆咪付接口)
  20. 刻意的练习才bbbbbb是区分一个人有没有成长的标准

热门文章

  1. Python编写随机一百个人的姓名,加面试考核得分
  2. 2.1.1队列——雏形(初始版本)
  3. C#实现驱动级模拟按键
  4. IP-SAN存储技术
  5. 爬虫实战——爬取电影天堂的电影详情页信息
  6. 高质量代码的几大标准
  7. Seata 设计方案
  8. LeetCode 1296. 划分数组为连续数字的集合
  9. Xcel Energy与D.E.Shaw签署100MW光伏电站购电协议
  10. 使用poi把Java对象转换成excel