大家好,我是一個軟件升級包。這幾天呢,我將會進行一次神奇的網(wǎng)絡之旅,從開發(fā)者的電腦中,一直跑到終端嵌入式設備中。
首先有一個問題:為什么叫軟件升級包,而不叫固件升級包呢?
沒有文件系統(tǒng)的嵌入式設備:
- 固件:是指一些沒有文件系統(tǒng)的嵌入式設備中,把 Flash 分成不同的功能分區(qū)??蓤?zhí)行程序需要放在某個固定的起始位置,才能被 bootloader 進行啟動。
- 軟件:是指具有文件系統(tǒng)的嵌入式設備,可執(zhí)行程序直接放在文件系統(tǒng)中。當設備啟動之后,操作系統(tǒng)會啟動文件系統(tǒng)中的可執(zhí)行程序。
帶有文件系統(tǒng)的設備:
我知道以上這樣的區(qū)分方式不是很嚴謹,但是誰又說得清楚嚴謹?shù)亩x是什么呢?
今天呢,主要以第1階段為主,帶你看一下我是如何從開發(fā)者的電腦里,一步一步的被嵌入式設備下載到本地的。
- 下載升級包;
- 解壓升級包,寫入 flash 或文件系統(tǒng);

上傳升級包
為了便于描述,我們來假設一個場景:運行在設備中的軟件一共有3個文件:
目前呢,設備中運行的版本是V1.0,現(xiàn)在開發(fā)人員對mylib.so庫中的算法進行了優(yōu)化,升級為V2.0版本,現(xiàn)在需要把這個新版本升級到嵌入式設備中。
- main 文件:可執(zhí)行程序;
- config.ini:配置文件;
- mylib.so:一個動態(tài)庫文件,里面包含一個算法,被 main 文件調(diào)用;

上傳升級包描述文件
現(xiàn)在,V2.0版本的升級包已經(jīng)上傳到文件服務器中了,是否現(xiàn)在就可以命令嵌入設備去下載、升級了呢?
version字段描述了文件服務器上升級包的版本,這樣的話,設備就可以知道到服務器中的最新版本。

下載升級包描述文件
此時,作為升級包的我,已經(jīng)靜靜的躺在文件服務器中了,我的兄弟升級包描述文件 app_desc.json呢,也在應用服務器中準備就緒了,現(xiàn)在就等著嵌入式設備開始升級。
- 亞馬遜的 AWS 平臺,是通過在云平臺中部署一個 job,來通知每一個需要升級的設備;
- 也可以通過一個手機 APP,向某一個嵌入式設備主動發(fā)起一個指令:嘿,老兄,請升級一下你的軟件;
當終端設備收到升級命令之后,第一步就是下載升級包描述信息。
下載之后,解析這個json格式的文本內(nèi)容,提取出version信息之后,與當前正在運行的軟件版本進行比較。
下載升級包
到了下載升級包的過程就簡單了,你可以直接用wget等工具來下載,也可以利用curl庫來手寫下載代碼。
下載完成之后,有一件很重要的事情千萬別忘記了,那就是:檢查下載的升級包是否正確!
解壓升級包
欲知后事如何,請聽下回分解!





