OpenRT固件更新流程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenRT固件更新流程相关的知识,希望对你有一定的参考价值。

1 使用范围

????? 本文档适用于分析OpenRT核心网路由器相关问题的技术人员。

?

2 固件更新需求

????? OpenRT系统包含系统镜像、配置文件、Web页面、内核模块、业务APP等多个组件。系统更新操作可能涉及多个部分,需要对多个组件进行更新。这对OpenRT的维护人员提出了很高的要求,增加了维护成本。因此需要设计一套方便简洁的系统固件升级流程,简化OpenRT的维护流程,减低使用门槛,提高OpenRT核心网路由系统的竞争力。

?

3 固件更新方案

3.1 基本思路

????? 由于OpenRT系统包含多个组件,因此将所有最新组件打包,以单个文件形式通过Web页面传输到系统后台。解包后再执行包中对应的脚本进行各组件的替换,以实现OpenRT系统整体更新的目的。

?

3.2 Web文件传输

????? OpenRT使用goAhead作为Web服务器,goAhead本身具备文件传输功能。其中前端设计需要在表单中添加一个type属性为file的input,即可实现传输更新固件包至后台的功能。

?

3.3 固件包更新流程

????? 固件更新包是一个tar.gz包,包含OpenRT各组件的最新版本和一个更新脚本update.sh。OpenRT后台成功获取到固件更新包后会创建更新标志文件updating.flg,表明已获取新版本需要及时更新。解压此包后通过执行update.sh替换系统内部各组件并重启,实现系统整体更新,详细流程如图 3.1所示。

技术分享图片

更新包处理流程可能因为系统断电等意外情况中断,导致系统更新出现错误。因此需要在每次开机时进行更新检测,主要检测是否存在更新标志文件updating.flg。若发现存在此文件表示上次更新操作意外中断,这时需重新执行update.sh,完成更新流程。详细流程如图 3.2所示。

技术分享图片
3.4 更新脚本示例

????? OpenRT涉及功能众多,每次更新内容千差万别。可能涉及新的组件,需要添加新的目录结构。也可能涉及新的配置文件等。因此需要根据每次更新的具体内容设计更新脚本update.sh,脚本的基本功能就是替换、添加、删除OpenRT文件系统中的各组件,示例如程序清单 3.1所示。

???????????????????????????????????????????????????????????????? 程序清单 3.1 update.sh示例

echo "updating firmware ..."

#
# dhcpserver
#
rm           /etc/dhcpdconfig.ini
cp           ./dhcpserver/dhcpdconfig.ini         /etc
rm_tool -r     /var/dhcplease
mkdir         /var/dhcplease
cp           ./dhcpserver/dhcpd.leases           /var/dhcplease
rm_tool -r     /apps/dhcpserver
mkdir         /apps/dhcpserver
cp           ./dhcpserver/dhcpserver              /apps/dhcpserver

#
# goahead
#
rm_tool -r     /apps/goahead
mkdir         /apps/goahead
cp           ./goahead/route.txt                     /apps/goahead
cp           ./goahead/goahead                    /apps/goahead
cp           ./goahead/gopass                      /apps/goahead
cp           ./goahead/webcomp                 /apps/goahead
cp           ./goahead/auth.txt                     /apps/goahead
rm           /lib/libgoahead.so
cp           ./goahead/libgoahead.so          /lib

#
# OpenRTCfgTool
#
rm_tool -r    /apps/OpenRTCfgTool/OpenRTCfgTool
mkdir        /apps/OpenRTCfgTool
cp          ./OpenRTCfgTool/OpenRTCfgTool       /apps/OpenRTCfgTool

#
# libcomm
#
rm            /lib/libcomm.so
cp            ./libcomm/libcomm.so             /lib

#
# libnethandle
#
rm            /lib/libnethandle.so
cp            ./libnethandle/libnethandle.so      /lib

#
# tmstat
#
rm            /lib/modules/trafficStats.ko
cp            ./tmstat/trafficStats.ko            /lib/modules

#
# web
#
untar         ./web.tar.gz                         /apps/goahead

#
# startup
#
rm            /etc/startup.sh
cp            ./startup.sh                           /etc/

#
# bsp
#
rm            /boot/grldr
rm            /boot/menu.lst
rm            /boot/OpenRT-bsp.elf
cp            ./bsp/grldr                             /boot
cp            ./bsp/menu.lst                      /boot
cp            ./bsp/OpenRT-bsp.elf          /boot

echo "update finish."

以上是关于OpenRT固件更新流程的主要内容,如果未能解决你的问题,请参考以下文章

IOT FW 更新流程 - Azure IOT vs Google IOT

项目实战_Python.子进程/协程在固件检测更新升级程序中的正确姿势?

Azure IOT 设备固件更新技巧,看这一篇就够了

sh HBA和驱动器固件闪烁片段

VSCode自定义代码片段——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程