ASR DFOTA概要設計說明

 

目錄

1 引言.... 3

1.1 編寫目的... 3

1.2 背景... 3

1.3 定義與縮寫... 3

1.4 參考資料... 3

2 總體設計.... 4

2.1 設計原理... 4

2.1.1 XDELTA.. 4

2.1.2 VCDIFF算法介紹... 4

2.1.3XDELTA的選擇... 7

2.2需求規定... 7

2.3運行環境... 7

2.4 FOTA原理框圖... 8

2.5系統軟件架構... 8

2.6升級流程圖... 9

3接口設計.... 9

3.1 AT命令... 9

3.2關鍵數據結構... 10

4 FOTA服務器要求.... 10

 


1 引言

1.1 編寫目的

本文檔簡要說明了L182項目FOTA方案的原理及流程,爲後續FOTA功能的實現有指導性作用,閱讀者對方案的實現有大致的瞭解。

1.2 背景

L182使用的是ASR1820s項目代碼,硬件平臺是Marvell,所使用的嵌入式實時操作系統是ThreadX5.1,在小衆系統、存儲空間有限的硬件資源的情況下實現FOTA功能是一種挑戰。

1.3 定義與縮寫

本文檔中使用的術語如表1-1術語表所示。

表1-1 術語表

縮寫、術語

FOTA

Firmware Over-The-Air

FTP

File Transfer Protocol

HTTP

Hyper Text Transfer Protocol

 

 

 

 

 

1.4 參考資料

本模塊概要設計的參考資料如表1-2 參考資料表所示。

表1-2 參考資料表

序號

文檔名稱

作者或資料來源

1

 DFOTA介紹.pdf

 ARS document release

2

 Xdelta3原理

https://blog.csdn.net/add_ada/article/details/51232869

3

Xdelta3 bsdiff Courgette三種差分算法比較

 https://blog.csdn.net/shangyexin/article/details/82885583

4

 

 

5

 

 

 

2 總體設計

2.1 設計原理

DFOTA實現採用xdelta項目,xdelta基於vcdiff算法,ASR1802S OBM移植了xdelta的decoding部分完成差分升級。

 2.1.1 XDELTA

Xdelta是基於字節的Vcdiff編碼,一種優秀的、被廣泛使用的差量更新算法,它在操作上既有對新文件(targetfile)和舊文件(sourcefile)的差分(differencing)又有對產生的patch包進行壓縮(compression),我們將產生patch包的過程統稱爲加密(encoding),而將合成新文件的過程統稱爲解密(decoding)。Xdelta和經典的壓縮算法LZ’77一樣,也是將source file劃分成一個個不相交而又連續的window,然後進行encoding和decoding。

設target file的大小爲n,source file的大小爲m,window的大小爲w。由於Xdelta在合成target file所消耗的時間爲O(n),所消耗的內存大小爲O(w),所以該壓縮算法很適合被移植到嵌入式設備中。

 2.1.2 VCDIFF算法介紹

Vcdiff可以實現文件的差分並壓縮的功能,當原文件爲空時,則相當於對新的文件直接壓縮。Vcdiff採用差分文件包含:ADD、COPY、RUN[、NOOP(空)]等操作方式。生成差分文件前,需要首先進行Vcdiff decoding,具體採用128進制來重新編碼,帶來的好處: 一是在不同的系統中統一採用8比特的字節編碼方式,二是對於小數字則可以節省存儲空間;在RF3284給出的示例將123456789,經過編碼後表示爲MSB+58,MSB+111,MSB+26,0+21,二進制值爲10111010 11101111 10011010 0010101,最高位MSB用來表示數據是否完成,1時表示下個字節仍屬於同一數據塊,即123456789 = 128*(128*(58 * 128 + 111) + 26) + 21。編碼完成後的文件生成差分格式包,也可進行壓縮後再進行傳輸。差分包執行過程示例如下,舊的文件內容爲a b c d e f g h i j k l m n o p,差分包包含指令COPY 4, 0;ADD 4, w x y z;COPY 4, 4;COPY 12, 24;RUN 4, z COPY指令帶有兩個參數,第一個爲長度,第二個爲地址;ADD指令帶有長度和,相應插入的符號信息;RUN指令將某字符重複多次。

在生成差分文件時需要進行字符串比較,有後綴樹及hash等方式,Vdelta中使用快速字符串比較算法(a fast string matching algorithm 可以使用相對其他算法較少的內存空間)。Vdelta的過程就是壓縮的過程,生成差分包的過程,可以理解爲原始包和新的包級聯,然後進行壓縮,只輸出新包部分的信息即爲差分包。理解生成差分包過程如下,採用最低3個字節匹配(需要使用合適前綴匹配,簡單理解當匹配字符串太長時,匹配成功可能性低,較短如一個字符比較時,索引開銷可能比存儲Index還大)。

VCDIFF可以在一種機器上encoding而在另一種機器上decoding,且encoding與decoding的過程相對獨立,可移植性強。Patch包被分爲三個獨立的部分,便於使用不同的技術來分別改進它們的編碼、壓縮,並且支持二次壓縮。Decoding的時間與內存消耗爲線性。而encoding的過程中,最主要的部分爲每次尋找最大匹配串的string matching過程,這個過程可採用hash,suffix trees,fast string matching等技術來優化,但其時間內存消耗對大文件而言仍不可接受,使用windows劃分這一技術有效的解決了問題。window的大小是一個重要的參數,window越大,

最長字符串匹配的結果越精確,產生的patch可能越小,而時間內存消耗則變大;window越小,則反之。

 2.1.3XDELTA的選擇

爲什麼選擇xdelta而不是bsdiff ?

bsdiff and bspatch are tools for building and applying patches to binary files. By using suffix sorting (specifically, Larsson and Sadakane's qsufsort) and taking advantage of how executable files change, bsdiff routinely produces binary patches 50-80% smaller than those produced by Xdelta, and 15% smaller than those produced by .RTPatch (a $2750/seat commercial patch tool).

bsdiff is quite memory-hungry. It requires max(17*n,9*n+m)+O(1) bytes of memory, where n is the size of the old file and m is the size of the new file. bspatch requires n+m+O(1) bytes.

從這裏可以看出bsdiff比xdelta壓縮比更高,但是bsdiff消耗的內存非常大,只考慮在設備上做decoding的話,bsdiff需要n+m+O(1)的內存,這對於1802s的系統升級是不可接受的,而xdelta採用window方法,可以減小內存使用量,bsdiff看起來更適合系統中單個文件的升級,比如手機上的app。

2.2需求規定

自動定時檢測當前設備是否存在新的固件版本,若存在自動下載最新的固件進行系統升級;提供版本檢測、固件下載、固件下載進度等AT命令給第三方做升級相關的二次開發。

2.3運行環境

硬件平臺:Marvell MP1820

實時操作系統:ThreadX5.1

2.4 FOTA原理框圖

 

2.5系統軟件架構

2.6升級流程圖

3接口設計

3.1 AT命令

序號

名稱

輸入參數

功能描述

1

$MYFOTACHECK

 null

檢查是否存在新的版本

2

$MYFOTA

<channel>,<mode>,<dst_ip/url:port>,<username>,<password>

下載升級包

3

$MYFOTA?

 null

獲取升級包下載進度

Note:下載升級包時若服務器不要求username或password該項參數可以填空格或任意字串

下載進度的返回值爲0-100

Eg:

AT$MYFOTA=1,0,"182.151.214.173:1027/fbf_dfota_full.bin",ftpuser,ftpuser

AT$MYFOTA=1,1,"182.151.214.173:1883/fbf_dfota.bin", ,

AT$MYFOTA?

3.2關鍵數據結構

 

數據結構名

fotaSetOpenReq 

定義模塊

 AT

功能簡述

升級請求參數

類型

 結構體

成員

成員名

類型

初始值

說明

host

 Char

 Null

服務器url 

username

 Char

 Null

用戶名 

password

 Char

 Null

 密碼

mode

unsigned char

0

模式

詳細描述

 Host:下載文件的地址(xx.xx.xx.xx:port, or URL

  Mode:下載方式(0: ftp, 1: http

 

4 FOTA服務器要求

由於ARS1802S平臺DFOTA獲取固件的途徑是基於FTP/HTTP協議的,所以FOTA服務器只要是商用FTP或HTTP服務器即可(考慮多臺設備的)。

 

 

附錄:

1802S DFOTA

差分升級步驟如下:

1. 首先將CP,MSA,RF 等文件使用xdelta 工具分別做出兩個版本之間的差分文件;

2. 使用ASR 自帶的fbf 生成工具將上面的各個差分文件組成一個完整的fbf_dfota 升級文件;

3. 使用ftp 或者http 下載fbf_dfota 文件至flash 中;

4. 開機後OBM 將flash 中的fbf_dfota 解析並將原文件和差分組成新的文件,拷貝到對應flash 中;

5. 記錄相關狀態,斷電保護等,完成升級;

 

 

舉例:

  1. 輸出CP 的差分文件delta_file_cp.bin

xdelta3-3.1.0-x86_64.exe -S -f -v -W 1048576 -e -s NEZHAC_CP_SKL_MIFI_TX_old.bin NEZHAC_CP_SKL_MIFI_TX_new.bin delta_file_cp.bin

 

2.生成fbf_dfota.bin 文件,MakeFOTAImage.exe 工具如果帶上-d 參數代表生成的fbf 是dfota 文件,用於差分升級;否則代表完整的fbf,用於完整升級

MakeFOTAImage.exe -d -f NezhaC_MiFi_SPI_Nand_LWG_Only_Nontrusted.blf -o fbf_dfota.bin -v NeZhaC_MSA_1.012.000

 

3.1802S支持at命令的ftp和http升級,使用ftp下載

AT$MYFOTA=1,0,"192.168.0.100/fbf_dfota.bin",asrdfota,123456

使用AT$MYFOTA?查詢升級進度

4.下載成功後,重啓設備就會看到decoding過程:

DFOTA upgrade

DFOTA_Upgrade,DFota_nOfImages

0xffffffff

DFOTA_Upgrade,pDevHeader_11->nOfImages

0x00000004

DFOTA_Upgrade,FBF_Flash_Address =

0x041e0000

DFOTA_Upgrade,FBF_Size

0x0014c000

ChecksumFormatVersion2

0x00000000

ChecksumFormatVersion2

0x00000000

ChecksumFormatVersion2

0x00000000

ChecksumFormatVersion2

0x8a54c727

DFOTA_Upgrade,sfile_flash_address

0x00060000

DFOTA_Upgrade,ofile_flash_address

0x04340000

DFOTA_Upgrade,delta file size

0x00142380

[DFOTA],windows

0x00000000

in bytes:

0x0001579d

out bytes:

0x00100000

total in bytes:

0x0001579d

total out bytes:

0x00100000

[DFOTA],windows

0x00000001

in bytes:

0x00014a42

out bytes:

0x00100000

total in bytes:

0x0002a1df

total out bytes:

0x00200000

[DFOTA],windows

0x00000002

in bytes:

0x0002556f

out bytes:

0x00100000

total in bytes:

0x0004f74e

total out bytes:

0x00300000

[DFOTA],windows

0x00000003

in bytes:

0x0004116a

out bytes:

0x00100000

total in bytes:

0x000908b8

total out bytes:

0x00400000

[DFOTA],windows

0x00000004

in bytes:

0x00028e62

out bytes:

0x00100000

total in bytes:

0x000b971a

total out bytes:

0x00500000

[DFOTA],windows

0x00000005

in bytes:

0x0003105c

out bytes:

0x00100000

total in bytes:

0x000ea776

total out bytes:

0x00600000

[DFOTA],windows

0x00000006

in bytes:

0x00040816

out bytes:

0x00100000

total in bytes:

0x0012af8c

total out bytes:

0x00700000

[DFOTA],windows

0x00000007

in bytes:

0x00011f06

out bytes:

0x00100000

total in bytes:

0x0013ce92

total out bytes:

0x00800000

[DFOTA],windows

0x00000008

in bytes:

0x000054ed

out bytes:

0x000a3e64

total in bytes:

0x0014237f

total out bytes:

0x008a3e64

warning !!!may be FBF tool add,avail_in

0x00000001

decode finished !!!

input bytes:

0x00142380

output bytes:

0x008a3e64

DFOTA_Upgrade,Flash_erase_size =

0x00a00000

DFOTA_Upgrade,Flash_Start_Address =

0x00060000

DFOTA_Upgrade ofile_flash.file_offset

0x008a3e64

DFOTA_Upgrade ofile_flash.file_address

0x04340000

Clear upgrade flag OK

TR069 return

0x00000000

----------------------------- WDT rest --------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章