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."

原文地址:http://blog.51cto.com/7199226/2286138

时间: 2024-08-06 18:31:22

OpenRT固件更新流程的相关文章

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

嫌长不看版 今天为大家准备的硬菜是:在 Azure IoT 中心创建 Node.js 控制台应用,进行端到端模拟固件更新,为基于 Intel Edison 的设备安装新版固件的流程.通过创建模拟设备应用,可实现 firmwareUpdate 直接方法,启动等待下载固件映像.下载固件映像,最终应用新版固件映像,并在每个阶段显示操作进度. 操作细节版 在进行物联网开发的过程中,很多用户会遇到这样的问题:物联网中的某些边缘设备上运行的固件存在问题需要修复,准备好新版固件后,如何集中批量部署给所有适合的

基于libUSB的USB设备固件更新程序(下载数据)(转)

源:基于libUSB的USB设备固件更新程序(下载数据) 本文紧接上一篇日志:基于libUSB-Win32的USB设备固件更新程序(前言),相关背景以及起因等,此处不再赘述,如感兴趣请移步. libUSB-Win32给出的example里面,有一个bulk.c文件,分析其关键代码,结合libusb官方文档,摘出其关键代码如下: int main(void) { usb_dev_handle *dev = NULL; /* the device handle */ usb_init(); /* i

iOS账号续费及证书更新流程

开发者账号会员快到期的时候,苹果会发送给开发者账号的注册邮箱一封邮件,提示用户账号快到期了,及时续费,一般是提前一个月提示用户续费.下面开始介绍续费流程; 1.登录开发者账号后,网页上面会有账号过期黄色提示;点击renew your membership ;会跳到支付页面;个人开发者账号是688RMB/年; 2.选择continue; 3.购买详情,选择continue,然后点击购买 4.使用visa 或者 万事达信用卡支付,填写好发票信息就ok了,需要纸质发票的选择纸质发票;购买完后,苹果会发

spark 笔记 13: 再看DAGScheduler,stage状态更新流程

当某个task完成后,某个shuffle Stage X可能已完成,那么就可能会一些仅依赖Stage X的Stage现在可以执行了,所以要有响应task完成的状态更新流程. =======================DAG task完成后的更新流程=================== ->CoarseGrainedSchedulerBackend::receiveWithLogging  --调度器的事件接收器 ->case StatusUpdate(executorId, taskId

Android 4.4 Kitkat Phone工作流程浅析(六)__InCallActivity显示更新流程

本文来自http://blog.csdn.net/yihongyuelan 转载请务必注明出处 本文代码以MTK平台Android 4.4为分析对象,与Google原生AOSP有些许差异,请读者知悉. 前置文章: <Android 4.4 Kitkat Phone工作流程浅析(一)__概要和学习计划> <Android 4.4 Kitkat Phone工作流程浅析(二)__UI结构分析> <Android 4.4 Kitkat Phone工作流程浅析(三)__MO(去电)流程

仅限Win10一周年更新版:Surface Pro 4/Book获固件更新

9月30日消息,Surface Pro 4/Book今天获得了一次固件更新,本次更新仅面向位于Win10一周年更新预览通道的全讯网,本次推送主要为驱动更新. 值得注意的是,仅有系统版本为14393.XX的Surface Pro 4/Book才能检测到更新驱动,系统版本为10586的设备需要等到下周Win10一周年更新时才能接收到相关推送,预计为18个驱动更新包. Surface Pro 4/Book固件更新内容 Suaface集成的驱动更新 Intel(R)触控设备驱动更新 Surface手写笔

【原创】我所理解的自动更新-客户端更新流程

创建更新线程,跟ui主线程通过message进行交互.1,去http://version.mygame.com/check.php? channelid=%d&appver=%d&resver=%d获取客户端最新版本信息.用curl获取,代码如下,至于curl的具体参数,man或者搜索引擎会告诉你答案 1 static size_t funcGetHttpText(void *ptr, size_t size, size_t nmemb, void *userdata) { 2 size_

手游更新流程

导语:更新游戏本来不是一件很复杂的事情,但是因为手游渠道太多,所以整个更新过程都很繁琐."73居团队"帮大家整理了一下手游更新的流程和一些需要注意的地方.未来会帮大家整理不同渠道的更新流程. <ignore_js_op> ┃更新工作 提前2周 [运营,测试]测试新版本[策划]提供更新内容[运营]再加工更新内容,做成对外的文档[运营]评估新版本风险(技术层面,玩家感受层面),提供预警方案(奖励,事故处理方法)[研发]测试通过后,开始打包各渠道版本[运营]新版本内容预告,迎接新

WebGL 启动加载触发更新流程分析

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. requestAnimFrame(tick); 此命令是 HTML5 中新增的用于替换定时器触发更新的命令,以实现动画更新,其后台实现有一特殊之处