1. 程式人生 > >OpenRT韌體更新流程

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