AliosThings的Flash劃分規則
Alios Things簡介
AliOS Things釋出於2017年杭州雲棲大會, 是 AliOS 家族旗下的、面向IoT領域的、高可伸縮的物聯網作業系統,於2017年10月20號宣佈在github上開源;具體介紹請點選連結:https://github.com/alibaba/AliOS-Things/blob/master/README-zh.md
本文主要介紹Alios的flash劃分規則,方便大家開發移植,如有疑問,歡迎留言。
1. 需求簡介
AliOS Things 由於功能需要,維護了一張flash分割槽表,這張表包括bootloader區、Application區、OTA TMP區以及parameters區,如下圖:
上圖的分割槽的簡介:
分割槽名稱 | 分割槽描述 |
---|---|
Bootloader區 | 儲存bootloader韌體,引導啟動整個系統,有些支援OTA程式碼copy等 |
Application區 | 當原地升級時,此分割槽為APP程式執行區;當乒乓升級(A,B分割槽)時,此分割槽為APP程式執行A區,與APP程式執行B區(OTA Tmp)交替儲存下載的韌體並執行對應的程式。 |
OTA Tmp區 | 當原地升級時,此分割槽用於存放O他的下載韌體;當乒乓升級(A,B分割槽)時,此分割槽為APP程式執行B區,與APP程式執行A區(Application)交替儲存下載的韌體並執行對應的程式。 |
Parameters1區 | OTA引數儲存區 |
Parameters2區 | KV儲存區 |
Parameters3區 | 使用者自定義(Mk3060,b_l475e兩個板子的KV儲存區) |
Parameters4區 | 安全相關的引數儲存區 |
2. 分割槽大小劃分規則
- 獲取晶片平臺的Flash大小
- 獲取bootloader資訊,包括:bootloader支援的升級型別(原地還是乒乓)、bootloader跳轉地址(如果是乒乓會有兩個跳轉地址);
- 跟據bootloader獲取的資訊,劃分整個Flash;
Bootloader支援原地升級
原地升級flash大小劃分方法表:
分割槽名 | 起始地址 | 分割槽大小 |
---|---|---|
Bootloader區 | 晶片Flash 起始地址 | bootloader跳轉地址與Flash起始地址差值 |
Application區 | Bootloader 跳轉地址 | 需要使用者根據實際情況自己評估Application的大小 |
OTA Tmp 區 | Application 分割槽結束地址 | 與Application儘量保持一致,如果支援差分可適當小些,使用者需根據實際情況自己評估 |
Parameters1區 | OTA Tmp 分割槽結束地址 | 一般是4Kbytes |
Parameters2區 | Parameters1分割槽結束地址 | 一般是8Kbytes |
Parameters3區 | Parameters2分割槽結束地址 | 一般是4Kbytes |
Parameters4區 | Parameters3分割槽結束地址 | 一般是4Kbytes |
Bootloader 支援乒乓升級
乒乓升級flash大小劃分方法表:
分割槽名 | 起始地址 | 分割槽大小 |
---|---|---|
Bootloader區 | 晶片Flash 起始地址 | bootloader跳轉地址與Flash起始地址差值 |
Application區 | Bootloader 跳轉地址1 | Bootloader跳轉地址2與bootloader跳轉地址1之間的差值(如果bootloader給出flash擦除範圍,以bootloader給出大小為準) |
OTA Tmp 區 | Bootloader 跳轉地址2 | 與Application區大小一致 |
Parameters1區 | OTA Tmp 分割槽結束地址 | 一般是4Kbytes |
Parameters2區 | Parameters1分割槽結束地址 | 一般是8Kbytes |
Parameters3區 | Parameters2分割槽結束地址 | 一般是4Kbytes |
Parameters4區 | Parameters3分割槽結束地址 | 一般是4Kbytes |
注意:
- 從安全形度考慮,建議使用者使用乒乓升級方式,並支援版本回滾;如果使用者考慮成本因素採用原地升級方式,因誤操作,升級了不正確的韌體,導致裝置變磚,使用者需要自己承擔責任。
- 除了以上定義的flash分割槽之外,有些晶片或者模組還有一些配置檔案需要燒寫到Flash固定地址,所以確保以上分割槽不能與這些配置檔案的地址空間相覆蓋或者重疊;
- 以上分割槽一旦定義好之後不能輕易更改,否則會造成資料丟失;如果客戶需要新增自定義分割槽,需在分割槽表索引定義的尾部順次新增不能中間插入
3. 示例
根據以上的劃分原則,以esp8266 Flash大小為2Mbytes 升級空間為1024×1024模組為例劃分各分割槽:
- 獲取Flash 大小:Flash size = 2M bytes;地址空間為:0x000000 ~ 0x200000
-
Bootloader資訊:
- 支援乒乓升級;
- Bootloader 跳轉地址1 = 0x1000 ;
- Bootloader 跳轉地址2 = 0x101000;
Application區理論大小為:0x101000 – 0x1000 = 0x100000;
- 根據模組廠商文件,需要燒的配置檔案:
由文件可知地址:0x1FC000 ~ 0x200000 為配置檔案儲存區,所以parameters1~parameters4 只能從0x1FC000向低地址劃分,即:
Parameters1 起始地址:0x1f6000 大小:0x1000
Parameters2 起始地址:0x1f7000 大小:0x2000
Parameters3 起始地址:0x1f9000 大小:0x1000
Parameters4 起始地址:0x1FA000 大小:0x1000 - Application區和OTA Tmp區劃分:
根據步驟3可知OTA Tmp區的範圍只能是parameters1 – bootloader跳轉地址2, 即:0x1f6000 – 0x101000 = 0xF5000; 由於是乒乓升級,application區的大小應該和OTA Tmp區大小相等;
由以上4個步驟可完成整個分割槽表的劃分,具體可檢視:aos/board/esp8266/board.c檔案。
相關文章
- 無人機也有交通規則? 新加坡將劃分天空車道無人機
- 三個規則劃分企業商機管理系統
- 動態規劃之數的劃分動態規劃
- 微服務劃分原則微服務
- 01 分數規劃
- 01分數規劃
- mysql 基於規則的執行計劃MySql
- 專案組織規劃的原則(轉)
- mysql 基於規則的執行計劃(二)MySql
- 整數劃分問題(動態規劃)動態規劃
- 執行計劃-3:解釋規則
- 漲知識!你不知道的中國手機號碼的編碼和劃分規則
- 演算法提高 數的劃分 動態規劃 無序演算法動態規劃
- 分數規劃學習筆記筆記
- (動態規劃)最小分糖果問題動態規劃
- 基於關聯規則的分類演算法演算法
- explain執行計劃中的key_len的計算規則AI
- React元件設計之邊界劃分原則React元件
- 動態規劃分類題目總結動態規劃
- GBase8a資料分佈規劃
- 分數規劃P3199
- clash 實現訂閱節點與規則的分離
- 燈具產品做認證劃分系列原則
- 軟體根據什麼原則、原理劃分模組
- 管理規則和基於規則的轉換——流
- Flash應用安全規範
- 元件的劃分元件
- zone的劃分
- make的模式規則模式
- SERVER的排序規則Server排序
- 中文分詞研究難點-詞語劃分和語言規範中文分詞
- Adobe釋出Linux Flash 未規劃64位版推出時間(轉)Linux
- RAM、ROM、FLASH、EMMC的簡單區分
- 分庫分表之歷史表如何選擇最佳分片路由規則路由
- WAF的幾種劃分方法和劃分型別型別
- 【java規則引擎】之規則引擎解釋Java
- 【java規則引擎】簡單規則的rete網路示意圖Java
- 正則匹配規則2