前言

嵌入式linux设备要进行软件升级有很种多方式方法,总的来说可以分为本地升级和远程升级。

本地升级包括升级工具升级,存储介质升级等,远程升级是指通过网络进行程序升级。

这里介绍一种同时至此本地和远程升级的方法,以供参考。

(一)本地升级:

(1)升级工具升级

现在的升级工具有很多,不同的芯片支持不同的工具,比如jlink,串口等,海思的芯片提供Hitool升级工具。升级工具升级直接参考芯片手册就可以了,这里不再介绍。

(2)存储设备升级

常见的存储设备有SD卡,TF卡,U盘,硬盘等。将升级文件拷贝到存储设备中,设备启动的时候,通过uboot去检索存储设备中是否有升级文件,如果有,则直接进行升级。

(二)远程升级:

(1)uboot通过FTP服务下载升级文件升级

其实该方法可以说是本地升级也可以说是网络升级,uboot启动之后,设置uboot的网络参数和FTP服务,通过网络将升级文件下载到内存中,然后再通过uboot的flash擦除了写入指令,将升级文件直接写入到flash的指定位置上。

这种方式用来进行设备调试就可以,方便快捷,但它不能批量操作,也不能程序自动升级,需要人为的辅助。

(2)通过应用程序网络升级

该方法是嵌入式linux设备远程升级的最常用的方式。基本流程是:linux系统启动之后,通过应用程序从服务器中下载升级文件进行程序升级。

该方法不需要认为操作,可设计程序自动全部升级。

下面介绍一种可以同时至此本地升级和远程升级的方法,首先看下图:

假设有个64M的flash,间Flash分成uboot,kernel,roootfs,app,para 五个分区。然后我们在参数区para分区的开始一段空间用来存储升级文件的版本信息。

参数区的深蓝色区域用来存储软件的版本信息,橙色区域用来存储网络升级参数。下面以kernel升级为例,具体说明本地升级与网络升级的流程,其它模块升级于此相同。

(1)制作升级文件

编译器或是交叉编译工具编译生成的文件多数是二进制文件,也就是单纯的一个升级文件,不包含其他信息。

携带更多的升级信息,我们可以将二进制升级文件.bin 打包成img 文件。

在Linux系统中可以直接使用mkimage命令,该命令可以指定CPU类型,img类型,压缩类型,内核的入口地址,头结构的名字,image的载入地址等等信息。

(2)本地升级实现

将img文件拷贝到U盘中插入设备。uboot需要为升级做如下操作:uboot起来之后,去扫描是否有插入存储设备,如果有存储设备,则扫描存储设备中是否有升级文件,以升级kernel为例,假设升级文件名为update_kernl.img。

当uboot检测到update_kernel.img文件后,去解析该img文件的文件头。将有用信息提取出来,比如文件头里的时间,img的创建时间等。

以这些作为升级参数,与上面flash图参数区中的Kernel Para版本做比较,如果一样则不进行升级操作,如果不一样,则将img文件中的升级文件数据写入到flash的指定位置中去。

最后更新Flash参数区kernel的版本信息。也就是上面图中参数区深蓝色中的Kernel Para。到此就完成了本地升级的操作。

(3)远程升级实现

首先将升级文件update_kernel.img从服务器中下载下来,与本地升级类似,提取update_kernel.img的头文件信息与Kernel Para参数做比较,如果不一样就升级。

一般升级地址是存在uboot的参数里,所以我们可以先将升级文件放到内存中(Hi3520芯片有一部分内存是用来做编解码的,软重启内存的数据不会被清空),uboot重启之后再进行升级操作。

在重启之前,将升级文件存放的地址AddrPhy,升级文件的校验信息DataCrc32,版本信息Version存放到flash的参数区去。

也就是上图参数区的橙色位置。uboot重启之后,去读取上图中flash参数区的橙色区域信息,看是否有需要升级的文件,如果有就按照升级参数的地址去读取升级文件,然后再将升级文件写到flash的固定位置去,最后更新参数区的升级信息。这样就完成了远程的升级操作。

结尾

上面介绍的升级方法,只介绍了基本的思路,详细实现内容太多不再介绍。如有更好的方法,欢迎评论指导。

---------------------------End---------------------------
长按识别二维码
关注 liwen01 公众号

海思Hi35xx 实现本地和远程升级程序的方法的更多相关文章

  1. 海思hi35xx 开发学习(3):视频输入

    视频输入(VI)模块实现的功能:通过 MIPI Rx(含 MIPI 接口.LVDS 接口和 HISPI 接口),SLVS-EC,BT.1120,BT.656,BT.601,DC 等接口接收视频数据.V ...

  2. 海思HI35xx平台软件开发快速入门之H264解码实例学习

    ref :https://blog.csdn.net/wytzsjzly/article/details/82500277   前言 H264视频编码技术诞生于2003年,至今已有十余载,技术相当成熟 ...

  3. 从0到1,本地到远程git程序过程

    从0到1,本地到远程git程序过程 切记一定要在需要提交代码的文件夹下git init,既是你使用了什么 tortoisegit什么工具,或者你在idea环境下已经add了,但是仍然需要你在当前文件夹 ...

  4. 在海思芯片上使用GDB远程调试

    1 前言 使用海思平台上(编译工具链:arm-himix200-linux)交叉编译 GDB 工具(使用版本8.2,之前用过10.2的版本,在编译 gdbserver 遇到编译出错的问题,因为关联了其 ...

  5. FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台

    FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待   前言   将ffmpeg移植到海思H ...

  6. 海思HI35XX之----视频处理单元各通道间的关系

    最近在折腾HI3518C的芯片,应用到IPCamera上,最终获取多路不同分辨率的视频流供不同需求的预览切换.此处简单记录一下视频前处理元VPSS(Video Process Sub-System)的 ...

  7. 海思hi35xx 开发学习(2):系统控制

    应用程序启动 MPP 业务前,必须完成 MPP 系统初始化工作.同理,应用程序退出MPP 业务后,也要完成 MPP 系统去初始化工作,释放资源. 视频缓存池 一组大小相同.物理地址连续的缓存块组成一个 ...

  8. 海思hi35xx 开发学习(1):海思媒体处理平台架构

    处理平台架构图: 主要分为: 视频输入(VI):VI 模块捕获视频图像,可对其做剪切.去噪等处理,并输出多路不同分辨率的图像数据. 视频处理(VPSS):VPSS 模块接收 VI 和解码模块发送过来的 ...

  9. OpenCV开发笔记(七十四):OpenCV3.4.1+ffmpeg3.4.8交叉编译移植到海思平台Hi35xx平台

    前言   移植opencv到海思平台,opencv支持对视频进行解码,需要对应的ffmpeg支持.   Ffmpeg的移植   Ffmpeg的移植请参考之前的文章:<FFmpeg开发笔记(十): ...

  10. 【转】 基于TFTP协议的远程升级设计

    版权声明:本文为博主原创文章,未经博主允许不得转载.联系邮箱:zhzhchang@126.com 说明:由于CSDN博客编辑器对word格式近乎不支持,因此对表格使用了图片方式(最后一个表格未使用图片 ...

随机推荐

  1. 面试官:说说JVM内存整体结构?

    Java JVM内存结构的面试常问知识 说说JVM内存整体的结构?线程私有还是共享的? JVM 整体架构,中间部分就是 Java 虚拟机定义的各种运行时数据区域. Java 虚拟机定义了若干种程序运行 ...

  2. Java 并发编程(二 )Thread

    线程状态 线程一般的状态转换图如下: 在线程生命周期中存在的状态解释如下: New(初始化)状态 此时线程刚刚被实例化,可以通过调用 start() 方法来启动这个实例化的的线程,使其状态转变成为 R ...

  3. flutter去除隐藏标题栏

    使用 SystemChrome 类来控制系统 UI 元素的显示和隐藏 import 'package:flutter/material.dart'; import 'package:flutter/s ...

  4. JavaScript异步编程2——结合XMLHttpRequest使用Promise

    目录 1. 概述 2. 详论 3. 参考 1. 概述 在上一篇文章<JavaScript异步编程1--Promise的初步使用>,简单介绍了一下Promise的初步使用.复习一下,Prom ...

  5. “互联网+”大赛之AI创新应用赛题攻略:大胆脑洞,共绘智慧生活蓝图

    摘要:本次"互联网+"大赛AI创新应用赛题的设置是希望学生可以从日常实际应用需求出发,结合自己的奇思妙想,提升智能终端用户的使用体验,为构建万物互联的智能世界贡献一份力量. 本文分 ...

  6. 云小课|VMware备份上云学习专列来了,快加入吧~

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:华为云云备份CBR ...

  7. 开心档之Java 测验

    目录 Java 测验 Java 测验 Java 测验技术文档 Java测验是一种衡量Java编程水平的测试,可以通过一系列问题和编程任务来测试Java开发人员的技能水平和理解程度.Java测验可以用于 ...

  8. 大银行数字化升级之后,火山引擎 VeDI 这次要把能力带给中小金融机构

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 数据技术是金融行业数字化转型的重要动力. 近年来,各大银行在全面推进数据技术建设上动作频频.比如,建设银行深化平台经营,依 ...

  9. Solon2 开发之IoC,七、切面与函数环绕拦截

    想要环绕拦截一个 Bean 的函数.需要三个前置条件: 通过注解做为"切点",进行拦截(不能无缘无故给拦了吧?费性能) Bean 的 method 是被代理的 在 Bean 被扫描 ...

  10. Nacos 1.2.1 集群搭建(三) Nginx 配置 集群

    配置 Nginx 可以把.conf 文件拉到本地,配置好再传上去 #gzip on; upstream cluster{ server 192.168.0.113:8848; server 192.1 ...