嵌入式本地和远程升级程序的方法

💡 原文中文,约2000字,阅读约需5分钟。
📝

内容提要

本文介绍了嵌入式Linux设备的本地和远程升级方法,包括升级工具和存储介质升级。同时介绍了一种同时支持本地和远程升级的方法,通过Flash数据分布实现。具体实现过程包括制作升级文件、本地升级和远程升级。

🔎

延伸解读

版本信息存储:本地与远程升级的共同基础

文章将Flash参数区划分为版本信息存储区(深蓝色)和网络升级参数区(橙色),这是同时支持本地与远程升级的关键设计。本地升级时,uboot通过比较img文件头中的时间信息与参数区中的版本信息决定是否升级;远程升级则先将升级文件暂存内存,并将地址、校验和版本信息写入参数区,重启后由uboot读取并执行升级。这种设计使两种升级方式共享同一套版本管理机制,避免了重复开发。

uboot FTP升级:适合调试,不适合量产

文章指出,uboot通过FTP下载升级文件的方式虽然方便快捷,但存在明显局限:不能批量操作,也不能程序自动升级,需要人为辅助。因此,该方法更适合设备调试阶段使用。对于需要批量部署或远程维护的场景,文章推荐通过应用程序网络升级,因为该方法不需要人为操作,可设计程序自动完成全部升级流程。读者在选择升级方案时,应根据实际使用场景权衡便利性与自动化需求。

img打包:让升级文件携带更多决策信息

文章强调,编译器生成的二进制文件通常只包含程序本身,不携带其他信息。为了在升级时进行版本比较等决策,可以将.bin文件打包成img文件。在Linux系统中使用mkimage命令,可以指定CPU类型、img类型、压缩类型、内核入口地址、头结构名字、载入地址等信息。这样,uboot在扫描到升级文件后,能够解析文件头并提取时间等有用信息,作为升级参数与Flash中的版本信息比较,从而决定是否执行升级。

❓

Q&A

嵌入式Linux设备软件升级通常分为哪几种方式?

通常分为本地升级和远程升级两种。本地升级包括升级工具升级和存储介质升级;远程升级指通过网络进行程序升级。

本地升级中,通过存储介质升级的具体步骤是什么?

将升级文件拷贝到SD卡、TF卡、U盘或硬盘等存储介质中,设备启动时由uboot检索存储介质中是否有升级文件,如果有则直接进行升级。

uboot通过FTP下载升级文件的方式有什么优缺点?

优点是方便快捷,适合设备调试;缺点是不能批量操作,也不能程序自动升级,需要人为辅助。

通过应用程序进行网络升级的基本流程是什么?

Linux系统启动后,通过应用程序从服务器下载升级文件进行程序升级。该方法不需要人为操作,可设计程序自动全部升级。

如何制作携带更多信息的升级文件?

可以将二进制升级文件.bin打包成img文件。在Linux系统中使用mkimage命令,指定CPU类型、img类型、压缩类型、内核入口地址、头结构名字、image载入地址等信息。

同时支持本地和远程升级的方法中,Flash参数区的作用是什么?

参数区的一部分用于存储升级文件的版本信息(如Kernel Para),另一部分用于存储网络升级参数(如升级文件地址、校验信息、版本信息),以便uboot判断和执行升级。

本地升级时,uboot如何判断是否需要升级kernel?

uboot扫描存储设备中的升级文件(如update_kernel.img),解析img文件头提取时间等信息,与Flash参数区中的Kernel Para版本比较,如果不一样则升级,一样则不升级。

远程升级的实现中,如何利用内存和uboot完成升级?

先将升级文件下载到内存中(利用软重启内存数据不清空的特性),在重启前将升级文件地址、校验信息、版本信息存放到Flash参数区;uboot重启后读取参数区信息,按地址读取升级文件并写入Flash固定位置,最后更新参数区信息。

🏷️

标签

➡️

继续阅读